Since Taurus4 is not force to use PyQT API 2 yet, a back-comp layer sould be offered to be compatible with non adapted external applications, e.g. Sardana.
You can see this behaviour in the SharedDataManager, and can be reproduce with this code:
from taurus.qt.qtcore.communication import SharedDataManager from taurus.external.qt.QtCore import QObject, pyqtSlot, pyqtSignal, QString, SIGNAL class SignalTest(QObject): activated = pyqtSignal([int], ["QString"]) def new_connect_activated(self): # The PyQt4 documentation will define what the default overload is. # In this case it is the overload with the single integer argument. self.activated.connect(self.handle_int) # For non-default overloads we have to specify which we want to # connect. In this case the one with the single string argument. # (Note that we could also explicitly specify the default if we # wanted to.) self.activated["QString"].connect(self.handle_string) def old_connect_activated(self): self.connect(self, SIGNAL("foo(int)"), self.old_handle_int) def handle_int(self, data): print "[NEW] activated signal passed integer", data def old_handle_int(self, data): print "[OLD] activated signal passed integer", data def handle_string(self, text): print "activated signal passed QString", text def signalEmiter(self, value): self.activated.emit(value) def oldSignalEmiter(self, value): self.emit(SIGNAL("foo(int)"), value) def readerNS(self): print "This is the reader [NEW-style]" def readerOS(self): print "This is the reader [OLD-style]" sdm = SharedDataManager(None) s = SignalTest() s.new_connect_activated() s.old_connect_activated() sdm.connectWriter("test1", s, "foo(int)") sdm.connectWriter("test2", s, "activated") sdm.connectReader("test1", s.readerOS) sdm.connectReader("test2", s.readerNS) s.signalEmiter(1) # it will raise an AttributeError: 'SignalTest' object has no attribute 'foo s.oldSignalEmiter(2)
Diff:
Essentially the problem is that the communication module connects signals from arbitrary widgets (which may themselves be programmed with old-style signals). This needs to be supported as well..
The same issue occurs with the AbstractSwitcher class.
A patch was sent to the devel list and applied to the develop branch