Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 两个不同类中的信号和插槽_Python_Multithreading_Qt_Pyside - Fatal编程技术网

Python 两个不同类中的信号和插槽

Python 两个不同类中的信号和插槽,python,multithreading,qt,pyside,Python,Multithreading,Qt,Pyside,我正在学习信号和插槽,我对这种情况感到困惑 上下文:我在ClassA中有一个方法,它需要(从工作线程)向ClassB(在主线程中)发出一个信号。工作线程执行一些繁重的处理,而主线程更新UI中的进度条。我需要工作线程将信号传递给主线程以更新UI 我不知道如何在两个不同的类之间传递信号。现在,我让第一个类实例化一个信号对象(Communicate),将其连接到第二个类中的一个方法,然后在准备就绪时发出。这导致了seg故障,所以很明显我做错了什么 我有以下信号等级: class Communicate

我正在学习信号和插槽,我对这种情况感到困惑

上下文:我在ClassA中有一个方法,它需要(从工作线程)向ClassB(在主线程中)发出一个信号。工作线程执行一些繁重的处理,而主线程更新UI中的进度条。我需要工作线程将信号传递给主线程以更新UI

我不知道如何在两个不同的类之间传递信号。现在,我让第一个类实例化一个信号对象(Communicate),将其连接到第二个类中的一个方法,然后在准备就绪时发出。这导致了seg故障,所以很明显我做错了什么

我有以下信号等级:

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\u progress连接到ClassB.set\u progress,这是一个未绑定的方法。这在PySide中不起作用,我很确定它在PyQt中也不起作用。您需要有一个ClassB实例,并将c.update\u progress连接到它的set progress方法,如 c、 更新进度。连接(我正在设置进度)


我肯定是在别处被实例化的。在调用emit之前,需要小心地设置i_am_b和A的实例的线程亲缘关系;请参阅QObject.moveToThread的文档

我让主线程生成ClassB的一个实例,我有一个方法更新该类对象的进度值。我已将信号连接到该方法。这把它修好了。非常感谢。