Python:如果调用类方法,则向所有实例发送信号?

时间:2013-05-30 09:40:25

标签: python qt python-3.x pyside

我在很多不同的页面和表单上有很多相同类型的按钮(源自QPushButton)。我想要一个全局开关来更改实例的属性,例如启用/禁用所有。是否可以为此目标调用类方法。一个想法是将每个新引用(__new__ / __init__?)保存在静态数组中,但是是否存在pythonic和垃圾收集器兼容的方式?从根(主窗口)到最后一个角落的标准递归搜索将是非常糟糕的。

使用:Python 3.3 + pyside + Qt4.8

1 个答案:

答案 0 :(得分:0)

是的,有可能:

class MyButton(QPushButton):

    BigSwitch = SomeQObjectThatDefinesTheSignal()

    def __init__(self, ...):
        ...
        BigSwitch.the_signal.connect(self.some_slot)

    def some_slot(self, ...):
        #handle the change of the property

    @classmethod
    def enable(cls):
        cls.BigSwitch.the_signal.emit(...)

您还可以使用staticmethodMyButton.BigSwitch代替类方法。