如何更改 QDialog 中的默认按钮行为
How to change the default button behaviour in a QDialog
我读到 QDialog
默认将其所有对象设置为默认值。例如,如果我添加 QPushButton
:
pushButton.setDefault(True)
pushButton.setAutoDefaul(True)
我知道我可以将每个对象设置为 False
,但是有没有办法避免 QDialog
将其所有对象设置为默认值?
实际上,将所有按钮的默认值设置为 False
不会有任何影响。如果没有按钮被设置为默认按钮,对话框将只是 choose one automatically - 所以无论你做什么,总是 是默认值。
您可以通过覆盖对话框的 keyPressEvent
:
来更改此行为
class Dialog(QtWidgets.QDialog):
def keyPressEvent(self, event):
if ((not event.modifiers() and
event.key() == QtCore.Qt.Key_Return) or
(event.modifiers() == QtCore.Qt.KeypadModifier and
event.key() == QtCore.Qt.Key_Enter)):
event.accept()
else:
super(Dialog, self).keyPressEvent(event)
但是,您应该注意,当按钮获得焦点时按 enter 或 return 仍会正常激活它。默认按钮机制仅在某些其他小部件具有焦点但不吞下按键事件时才会发挥作用(例如,在行编辑中按 return)。
我读到 QDialog
默认将其所有对象设置为默认值。例如,如果我添加 QPushButton
:
pushButton.setDefault(True)
pushButton.setAutoDefaul(True)
我知道我可以将每个对象设置为 False
,但是有没有办法避免 QDialog
将其所有对象设置为默认值?
实际上,将所有按钮的默认值设置为 False
不会有任何影响。如果没有按钮被设置为默认按钮,对话框将只是 choose one automatically - 所以无论你做什么,总是 是默认值。
您可以通过覆盖对话框的 keyPressEvent
:
class Dialog(QtWidgets.QDialog):
def keyPressEvent(self, event):
if ((not event.modifiers() and
event.key() == QtCore.Qt.Key_Return) or
(event.modifiers() == QtCore.Qt.KeypadModifier and
event.key() == QtCore.Qt.Key_Enter)):
event.accept()
else:
super(Dialog, self).keyPressEvent(event)
但是,您应该注意,当按钮获得焦点时按 enter 或 return 仍会正常激活它。默认按钮机制仅在某些其他小部件具有焦点但不吞下按键事件时才会发挥作用(例如,在行编辑中按 return)。