Python 如何在PySide中以self作为参数发出信号?

Python 如何在PySide中以self作为参数发出信号?,python,qt,pyside,Python,Qt,Pyside,在PySide中,我希望使用将信号定义为参数的类发出信号。例如: class MyWidget(QtGui.QWidget): signal_widget_closed = QtCore.Signal(MyWidget) def close(self): super(MyWidget, self).close() self.signal_widget_closed.emit(self) 但是,第二行给出了一个NameError,因为此时MyW

在PySide中,我希望使用将信号定义为参数的类发出信号。例如:

class MyWidget(QtGui.QWidget):

    signal_widget_closed = QtCore.Signal(MyWidget)

    def close(self):
        super(MyWidget, self).close()
        self.signal_widget_closed.emit(self)
但是,第二行给出了一个NameError,因为此时MyWidget还不存在。 现在我通过发出这样的QWidget来解决这个问题

    signal_widget_closed = QtCore.Signal(QtGui.QWidget)

但我更喜欢使用MyWidget作为类型的解决方案。有什么想法吗?

您不需要这个参数。

在插槽中使用,找出发出信号的对象。

可以在类定义之后定义信号

您的代码如下所示:

class MyWidget(QtGui.QWidget):
    def close(self):
        super(MyWidget, self).close()
        self.signal_widget_closed.emit(self)
MyWidget.signal_widget_closed = QtCore.Signal(MyWidget)

如果我将插槽作为正常过程调用(或者我必须分别实现这两种情况下的功能),那么这将不起作用。你链接到的页面警告说:“这个函数违反了面向对象的模块化原则。”不过,知道这个选项还是不错的。谢谢你提到它。@titusjan唯一的解决方案似乎是使用元类,我可以说这不值得。也许可以尝试重新思考应用程序的体系结构。基本上,您需要这样做。但是仅仅在类定义之后添加信号的解决方案将不起作用,因为PySide似乎在类定义之后使用元类来读取这些信号。。。