如何使 pyqtSignal() 成为类的私有信号?

问题描述 投票:0回答:0

我想知道是否有可能使 pyqtSignal() beeing 成为类的私有信号。 该信号可以在课堂内使用,但不应在课堂外可见。

我试着在我的信号名称前加上“_”,就像您在代码示例中看到的那样: 我的信号名称是

_A_valueChanged
但它仍然可以通过 Foo 类的外部代码访问。

import sys
from PyQt5 import QtCore
from PyQt5.QtCore import *

class Foo(QObject):
    _A_valueChanged = pyqtSignal(int)

    def __init__(self):
        super().__init__()
        self._A = 0
        self.Linked_to_A = 0

        self._A_valueChanged.connect( self.changeLinkedVar )

    @property
    def A(self):
        return self._A

    @A.setter
    def A(self, value):
        self._A = value
        self._A_valueChanged.emit(value)

    @QtCore.pyqtSlot(int)
    def changeLinkedVar( self, value ):
        print( "changeAttributeLinked " )
        self.Linked_to_A= value

if __name__ == "__main__":
    def MainNoticeThat_A_changed():
        print( "Main : foo.A has changed ")

    foo = Foo()
    foo._A_valueChanged.connect( MainNoticeThat_A_changed )

    foo.A = 5
    print( "main : foo.A = %d  ,  foo.Linked_to_A = %d " %( foo.A, foo.Linked_to_A) )

信号 _A_valueChanged 在 Foo 类的 def A() 中发出,并且被很好地捕获 在类 Foo 和 Foo 方法 changeLinkedVar() 中被很好地调用,更新属性 self.Linked_to_A。这是想要的。

但是在main中,

foo._A_valueChanged.connect( MainNoticeThat_A_changed )
正在工作,并且
MainNoticeThat_A_changed()
被调用。 这不是想要的。 我想要一个 python 错误,例如“类 Foo 没有公共信号 _A_valueChanged”

python pyqt signals
© www.soinside.com 2019 - 2024. All rights reserved.