[英]Signals and slots in two different classes
我正在学习信号和插槽,对此情况感到困惑。
上下文:我在ClassA中有一个方法,该方法需要(从工作线程中)向ClassB(在主线程中)发出信号。 工作线程执行一些繁重的处理,而主线程更新UI中的进度条。 我需要工作线程将信号传递到主线程以更新UI。
我不确定如何在两个不同的类之间传递信号。 现在,我让第一类实例化一个信号对象(Communicate),将其连接到第二类中的方法,然后在准备好时发出。 这导致段错误,所以很明显我在做错事。
我有以下信号类:
class Communicate(QtCore.QObject):
update_progress = QtCore.Signal()
这是ClassA中的方法,辅助线程:
def methodInClassA(self, filename):
c = Communicate()
c.update_progress.connect(ClassB.set_progress)
print "emitting"
c.update_progress.emit()
...
这是ClassB中的方法,该方法用于更新UI中的进度条:
class ClassB(QtGui.QDialog, classB.Ui_Dialog):
def __init__(self, parent=None):
super(ClassB, self).__init__(parent)
self.setupUi(self)
def set_progress(self):
print "RECEIVED"
sender = self.sender()
self.progressBar.setValue(100)
您正在将c.update_progress连接到ClassB.set_progress,这是一种未绑定的方法。 这在PySide中不起作用,我很确定在PyQt中也将不起作用。 您需要有一个ClassB 实例 ,并将c.update_progress连接到其设置的进度方法,例如c.update_progress.connect(i_am_b.set_progress)
i_am_b必须已在其他地方实例化。 您需要谨慎设置i_am_b和A实例的线程亲和性,然后再调用它。 请参阅QObject.moveToThread的文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.