在下面的代码中,对话框的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_()
答案 0 :(得分:3)
您必须更改两个按钮上的auto default设置:
ok = QtWidgets.QPushButton("Ok")
ok.setAutoDefault(False)
cancel = QtWidgets.QPushButton("Cancel")
cancel.setAutoDefault(False)