2017-02-17 19 views
1

次のコードでは、ダイアログの[OK]ボタンが常にフォーカスされているように見えるので、enterを押すとダイアログが受け入れられて閉じます。私が目指しているのは、ユーザが行編集でテキストを編集してから、テキストを処理するために完了したらEnterを押すことができるようにすることです(editingFinishedシグナル)。ただし、このボタンをクリックするとダイアログが表示されます。ダイアログをサブクラス化せずにこれを無効にする方法はありますか?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

次の2つのボタンの上にauto defaultの設定を変更する必要があります。

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

感謝を喜ば説明してもらえ、それは私がまさに必要です –

関連する問題