Как изменить поведение кнопки по умолчанию в QDialog - PullRequest
0 голосов
/ 09 мая 2018

Я прочитал, что QDialog по умолчанию имеет все свои объекты, установленные по умолчанию. Например, если я добавлю QPushButton:

pushButton.setDefault(True)   
pushButton.setAutoDefaul(True)

Я знаю, что могу установить каждый из них как False, но есть ли способ избежать QDialog установки всех его объектов по умолчанию?

1 Ответ

0 голосов
/ 09 мая 2018

На самом деле установка значения по умолчанию False для всех кнопок не повлияет на . Если ни одна кнопка не была установлена ​​по умолчанию, диалоговое окно просто выберет ее автоматически - так что всегда будет значением по умолчанию, независимо от того, что вы делаете.

Вы можете изменить это поведение, переопределив диалог 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)

Однако следует помнить, что нажатие кнопки ввода или возврата, когда кнопка имеет фокус, все равно активирует ее как обычно. Механизм кнопки по умолчанию вступает в действие только тогда, когда какой-то другой виджет имеет фокус, но не глотает событие нажатия клавиши (например, нажатие возврата в редактировании строки).

...