python - 防止 okay QPushButton 在按回车时接受对话框

标签 python pyqt pyqt5 qpushbutton qdialog

在下面的代码中,对话框的 Ok 按钮似乎始终处于焦点状态,因此当按下 enter 时,对话框被接受并关闭。我的目标是让用户在行编辑中编辑文本,然后在完成处理文本(editingFinished 信号)时允许按回车键。但是,这会触发接受对话框的“确定”按钮。有没有办法在不子类化对话框的情况下禁用它?

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

最佳答案

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

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

关于python - 防止 okay QPushButton 在按回车时接受对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42306835/

相关文章:

python - 使用按键单击时如何更改pyqt5中的按钮文本

python - 从可以在新类/窗口中使用的按钮获取值(value)

python - 即使已安装也无法导入 matplotlib

python - 适用于 Python 3 的 Jupyter Notebook 中出现 ModuleNotFoundError,但不适用于 Python 2 (Mac OSX)

python - 通过文本输入添加新项目时,阻止 QScrollArea 项目跳跃

python - pyqt5 应用程序中的 matplotlib 工具栏

python - 使用 PyQt5 和 pyudev 通知 QML 'usb device inserted' 事件

python - 为什么 YoutubeDL 只提取播放列表的第一个索引?

python - 从包含数字的文件生成二维列表的函数

python - 使qt日历箭头变大