Запретить закрытие формы (диалога) при нажатии кнопок QButtonBox

Чтобы запретить закрытие формы (диалога) при нажатии кнопок QButtonBox (в том числе через QDialogButtonBox), если не выполнены определённые условия, нужно перехватывать сигналы нажатия кнопок и контролировать логику закрытия.

Если вы просто подключите кнопку «ОК» к слоту, который вызывает self.accept(), форма закроется независимо от вашей проверки.

Необходимо разорвать это автоматическое подключение. Вместо этого подключите нажатие кнопки к собственному слоту, где сначала проверяется условие, и только при его выполнении вызывается self.accept().

class dialogFormApp(QDialog, editForm.Ui_Dialog):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        # Отключаем стандартное поведение
        self.buttonBox.accepted.disconnect(self.accept)
        # Подключаем свой обработчик
        self.buttonBox.accepted.connect(self.formaccept)
 
    def formaccept(self):
        print("Accepted")
        # Здесь можно поставить условие
        self.accept()
  • python/pyqt/dialog_form_manual_accept.txt
  • Последнее изменение: 01.08.2026 18:05
  • r0wbh