当PyQt4中显示QDialog时,如何执行回调?

当PyQt4中显示QDialog时,如何执行回调?,qt,dialog,pyqt,Qt,Dialog,Pyqt,我希望能够在PyQt4中显示QDialog时执行回调,最好是通过信号/插槽机制。看,我找不到正确的信号来连接我要运行的插槽 这样做的好方法是什么?在我看来,重写or方法并将回调放在那里是很好的 class MyDialog(QtGui.QDialog): def show(self): super(MyDialog, self).show() callbacks() 如果希望每次显示对话框时都发出信号,可以创建如下类: class Dialog(QtGu

我希望能够在PyQt4中显示QDialog时执行回调,最好是通过信号/插槽机制。看,我找不到正确的信号来连接我要运行的插槽


这样做的好方法是什么?

在我看来,重写or方法并将回调放在那里是很好的

class MyDialog(QtGui.QDialog):
    def show(self):
        super(MyDialog, self).show()
        callbacks()

如果希望每次显示对话框时都发出信号,可以创建如下类:

class Dialog(QtGui.QDialog):
    dialogShown = QtCore.pyqtSignal()

    def showEvent(self, event):
        super(Dialog, self).showEvent(event)
        self.dialogShown.emit()
    self.dialog = Dialog()
    self.dialog.dialogShown.connect(self.handleDialogShown)
然后像这样使用它:

class Dialog(QtGui.QDialog):
    dialogShown = QtCore.pyqtSignal()

    def showEvent(self, event):
        super(Dialog, self).showEvent(event)
        self.dialogShown.emit()
    self.dialog = Dialog()
    self.dialog.dialogShown.connect(self.handleDialogShown)

show()
插槽不是虚拟的,因此
showEvent
可能是最佳选择(但取决于OP想要的确切行为)。此外,OP更喜欢信号/插槽解决方案,因此您可以发出自定义的
对话框显示的
信号,而不是直接调用回调。@Ekhumaro,您能否详细说明
对话框显示的
信号发射的工作原理?这听起来是个好主意。我添加了另一个答案来说明我的意思。@ekhumoro是的,我放置了一个通用回调,但没有定义任何内容,只是为了说明在何处放置该逻辑。也许我应该像你在回答中那样定义一个自定义信号,顺便问一下,在python上下文中,不虚拟(关于show方法)意味着什么?@DRC。虚拟方法也可以由Qt在内部调用,而像
show()
这样的非虚拟方法只能由Python代码调用。