如何更改 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)。