【问题标题】:Prevent okay QPushButton from accepting dialog on press enter防止好的 QPushButton 在按下回车时接受对话框
【发布时间】:2017-07-07 12:07:46
【问题描述】:

在下面的代码中,对话框的 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_()

【问题讨论】:

  • 请您解释一下好吗

标签: python pyqt pyqt5 qpushbutton qdialog


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2012-08-06
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    相关资源
    最近更新 更多