Как настроить диалоговый сигнал/слот в pyQT?

У меня есть набор кнопок, ОК и Отмена

buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok|
                                    QtGui.QDialogButtonBox.Cancel)

Я хочу диалоговое окно, когда мы нажимаем Cancel

self.connect(buttonBox, SIGNAL("rejected()"),
                            self, SLOT("reject()"))
    def reject(self):
        print 'hello'
        self.emit(SIGNAL("reject()"))

Я не уверен, что излучать. Я не хочу просто закрыть дело. Я знаю, как создать QMessageBox, когда я нажимаю X. Я хочу сделать подсказку и закрыть в reject.

Я надеюсь, что это имеет смысл. Спасибо.


К вашему сведению, когда я нажимаю X, чтобы закрыть все приложение, у меня есть переопределенный метод

def closeEvent(self, event):
    reply = QtGui.QMessageBox.question(self, 'Message', 'Are you sure to quit?', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
    if reply == QtGui.QMessageBox.Yes:
        event.accept()
    else:
        event.ignore()

Этот метод переопределяет self.close().


person CppLearner    schedule 13.04.2012    source источник


Ответы (3)


Вы ничего не излучаете. QDialog имеет слот reject(), который устанавливает код возврата Rejected и закрывает диалог. Вы должны назвать это. Вы также назвали свой собственный слот reject, тем самым переопределив его. Вы все еще можете называть это так:

super(NameOfClass, self).reject()

или измените имя своего слота на другое и используйте:

self.reject()

там.

person Avaris    schedule 13.04.2012

Возможно, вы захотите перезаписать функцию accept() вашего класса QDialog.

Например:

def accept(self):
    if your_validation_userconfirmation_fct():
        self.done(QtWidgets.QDialog.Accepted)
person cuda12    schedule 05.01.2017

Давайте перезапишем функцию accept().

def accept(self):
    if validation_ok():
        super().accept()
person koberone    schedule 17.02.2020