如何更改 QDialog 中的默认按钮行为

Jon*_*ski 2 python pyqt qdialog pyqt4 python-2.7

我读到QDialog它的所有对象都设置为默认值。例如,如果我添加一个QPushButton

pushButton.setDefault(True)   
pushButton.setAutoDefaul(True)
Run Code Online (Sandbox Code Playgroud)

我知道我可以将每个对象设置为False,但是有没有办法避免QDialog将其所有对象设置为默认值?

ekh*_*oro 6

False实际上,将所有按钮设置为默认值不会有任何影响。如果没有将按钮设置为默认按钮,则对话框将自动选择一个按钮- 因此无论您做什么,总会有一个默认按钮

您可以通过覆盖对话框来更改此行为keyPressEvent

def keyPressEvent(self, event):
    if event.matches(QtGui.QKeySequence.Cancel):
        self.reject()
    else:
        event.ignore()
Run Code Online (Sandbox Code Playgroud)

Esc这完全覆盖了默认按钮的行为,但保留了按下eg时对话框的取消。如果您也不希望这样,只需调用event.ignore(),这将允许所有按键事件传播到当前焦点小部件。因此,当按钮或行编辑获得焦点时,按EnterReturn仍将正常激活它。默认按钮机制仅在其他某个小部件具有焦点但不吞咽按键事件(例如,Return在行编辑中按下时)时才发挥作用。