Я хочу иметь QDialog, который блокирует взаимодействие с MainWindow, но изначально ни один виджет не имеет фокуса, т.е. е. ни одна кнопка не имеет синей рамки и не нажимается при нажатии «Ввод».
Мне не нужно использовать QDialog, пока я получаю такое же поведение: блокировка всего взаимодействия с главным окном пока другое окно открыто.
Я пытался переопределить метод showEvent() и вызвать self.setFocus(), чтобы переместить фокус на само окно QDialog, но это не сработало. Фокус всегда оставался на первой кнопке.
Моей идеей было создать невидимую фиктивную кнопку с setDefault(True), чтобы гарантировать, что эта кнопка получит фокус. Это не работает. Если я выполню setVisible(False), первый QPushButton в макете получит фокус, обозначенный синей рамкой вокруг него. Однако, если я не устанавливаю для видимости значение false, кнопка dummy_button имеет синюю рамку, что указывает на то, что она получила фокус.
Ниже приведен мой код:
import sys
from PyQt5.QtWidgets import QApplication, QDialog, QPushButton, QVBoxLayout
class CustomDialog(QDialog):
def __init__(self):
super().__init__()
self.setWindowTitle("Custom Dialog")
# Create buttons
self.button1 = QPushButton("Button 1", self)
self.button2 = QPushButton("Button 2", self)
self.button1.setDefault(False)
self.button2.setDefault(False)
self.dummy_button = QPushButton(self)
self.dummy_button.setVisible(False) # Removing this line will move the focus to the dummy button
self.dummy_button.setDefault(True)
# Layout
layout = QVBoxLayout(self)
layout.addWidget(self.button1)
layout.addWidget(self.button2)
# Set layout
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication(sys.argv)
dialog = CustomDialog()
dialog.show()
sys.exit(app.exec_())
Подробнее здесь: https://stackoverflow.com/questions/785 ... -a-qdialog
Как установить фокус на невидимую кнопку или само окно в QDialog (PyQt5)? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение