PySide2信号未在具有对象的线程之间捕获

2024-10-01 11:27:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个问题找不到答案。在

我正在开发一个GUI应用程序,它是用Python及其UI库开发的:PySide2(Python的Qt包装器)

我有一个很重的计算功能,我想把它放到另一个线程上,这样就不会冻结我的用户界面。Ui应该显示“加载”,当函数结束时,从中接收结果并用它更新Ui。在

我试过很多不同的代码,很多例子对其他人有用,但对我不起作用,这是PySide2的错误吗?(例如,这几乎就是我想要做的:Updating GUI elements in MultiThreaded PyQT

我的代码是:

class OtherThread(QThread):

    def __init__(self):
        QThread.__init__(self)

    def run(self):
        print 'Running......'
        self.emit(SIGNAL("over(object)"), [(1,2,3), (2,3,4)])

@Slot(object)
def printHey( obj):
    print 'Hey, I\'ve got an object ',
    print obj

thr = OtherThread()
self.connect(thr,SIGNAL("over(object)"),printHey)
thr.start()

如果我使用诸如bool或{}之类的原语,但不使用object,那么我的代码就可以工作了。我看到了“奔跑…”,但从来没有其他的。在

希望有人能启发我


Tags: 代码selfuisignalobjectinitdefgui
1条回答
网友
1楼 · 发布于 2024-10-01 11:27:31

不能在类实例上动态定义信号。它们必须被定义为类属性。您应该使用new-style signals and slot syntax。在

class OtherThread(QThread):
    over = QtCore.Signal(object)

    def run(self):
        ...
        self.over.emit([(1,2,3), (2,3,4)])


class MyApp(QtCore.QObject)

    def __init__(self):
        super(MyApp, self).__init__()
        self.thread = OtherThread(self)
        self.thread.over.connect(self.on_over)
        self.thread.start()

    @QtCore.Slot(object)
    def on_over(self, value):
        print 'Thread Value', value

相关问题 更多 >