im Prinzip geht es darum, in einem mit Qt-Designer erstellten Fenster, eine Fortschrittsanzeige (QProgressBar) zu steuern, deren Wert jedoch von Berechnungen, die in einem separaten Thread durchgeführt werden, abhängt.
Abstrahiert sieht das dann ungefähr so aus:
Code: Alles auswählen
from PyQt4 import QtCore
import threading
class A(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.sigobj = QtCore.QObject()
def run(self):
self.sigobj.emit(QtCore.SIGNAL('doIt'))
class B():
def __init__(self):
self.handleA = A()
QtCore.QObject.connect(self.handleA.sigobj, QtCore.SIGNAL("doIt"), self.xyz)
def xyz(self):
print "XYZ!"
handleB = B()
handleB.handleA.start()
Meine Vermutung ist, dass die Zeile
Code: Alles auswählen
QtCore.QObject.connect(self.handleA.sigobj, QtCore.SIGNAL("doIt"), self.xyz)
Code: Alles auswählen
handleB.handleA.sigobj.emit(QtCore.SIGNAL('doIt'))
Wie bekomme ich hier die Funktionalität, die ich gerne hätte, nämlich, dass die Klasse A ein Signal triggert, dessen Slot in der Klasse B liegt? In B kann ich die Signal-Slot-Zuweisung ja nicht durchführen, da B keine Instanz von A hat (oder so ähnlich... ich denke ihr wisst, was ich meine).
Was ich auch nicht verstehe, ist dass die Aufrufe:
Code: Alles auswählen
print self.sigobj
Code: Alles auswählen
handleB.handleA.sigobj.emit(QtCore.SIGNAL('doIt'))
die gleiche Adresse liefern, die emit-Methode aber trotzdem nur aus Klasse B funktioniert.
Vielen Dank im Voraus!