2017-02-17 2 views
1

В следующем коде кнопка Ok в диалоговом окне всегда находится в фокусе, поэтому при нажатии кнопки диалог принимается и закрывается. Я стараюсь, чтобы пользователь редактировал текст в строке редактирования, а затем ему разрешалось нажимать клавишу ввода, когда это делается для обработки текста (editFinished signal). Тем не менее, это вызывает кнопку Ok, которая принимает диалог. Есть ли способ отключить это без подкласса диалога?Предотвратите нормально QPushButton от принятия диалогового окна при нажатии на ввод

from PyQt5 import QtWidgets 
import sys 

app = QtWidgets.QApplication(sys.argv) 

widget = QtWidgets.QWidget() 
dbutton = QtWidgets.QPushButton("Show Dialog", widget) 

dialog = QtWidgets.QDialog(None) 
vlay = QtWidgets.QVBoxLayout(dialog) 
form = QtWidgets.QFormLayout(None) 
vlay.addLayout(form) 

form.addRow("Text Input", QtWidgets.QLineEdit()) 
form.addRow("Float Input", QtWidgets.QSpinBox()) 

ok = QtWidgets.QPushButton("Ok") 
cancel = QtWidgets.QPushButton("Cancel") 
hlay = QtWidgets.QHBoxLayout() 
hlay.addWidget(ok) 
hlay.addWidget(cancel) 
vlay.addLayout(hlay) 
ok.clicked.connect(dialog.accept) 
cancel.clicked.connect(dialog.reject) 

dbutton.clicked.connect(dialog.exec_) 
widget.show() 

app.exec_() 
+0

Не могли бы вы объяснить это лучше, пожалуйста – eyllanesc

ответ

2

Вы должны изменить auto default настройки на две кнопки:

ok = QtWidgets.QPushButton("Ok") 
ok.setAutoDefault(False) 
cancel = QtWidgets.QPushButton("Cancel") 
cancel.setAutoDefault(False) 
+0

Спасибо, что это именно то, что мне было нужно –

Смежные вопросы