我想知道是否有可能使 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”