如何在关闭之前继承QMessageBox并运行操作

时间:2018-02-08 19:54:38

标签: python pyqt pyqt4 subclass qmessagebox

我想在通过AcceptRole返回之前在QMessageBox子类中启动一个进程。我不清楚为什么以下不起作用:

class Question(QtGui.QMessageBox):

    def __init__(self, text):
        QtGui.QMessageBox.__init__(self, QtGui.QMessageBox.Question, 
           "title", text, buttons=QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel)
        self.text = text

    def accept(self):

        # run opertation
        print self.text

        QtGui.QMessageBox.accept(self)

dial = Question("text")
dial.exec_()

由于QMessageBox.Ok的buttonRole是AcceptRole,我希望可以调用accept()。情况不是这样吗?

任何见解都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

你有正确的想法。您只需重新实现虚拟done()广告位,而不是虚拟accept()广告位:

class Question(QtGui.QMessageBox):
    def __init__(self, text):
        QtGui.QMessageBox.__init__(
            self, QtGui.QMessageBox.Question, "title", text,
            buttons=QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel)
        self.text = text

    def done(self, result):
        print self.text
        QtGui.QMessageBox.done(self, result)

result将是点击按钮的StandardButton值(例如QMessageBox.OkQMessageBox.Cancel,在上例中。