防止好的QPushButton接受按下输入的对话框

时间:2017-02-17 20:29:01

标签: python pyqt pyqt5 qpushbutton qdialog

在下面的代码中,对话框的Ok按钮似乎总是聚焦,因此当按下enter时,对话框被接受并关闭。我的目标是让用户在行编辑中编辑文本,然后在完成处理文本时允许按Enter键(editingFinished信号)。但是,这会触发Ok按钮接受对话框。有没有办法在没有继承对话框的情况下禁用它?

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_()

1 个答案:

答案 0 :(得分:3)

您必须更改两个按钮上的auto default设置:

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