PyQt QueuedConnection有时会起作用

2024-09-26 04:52:05 发布

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

我有一个使用QThreads的应用程序。我将不同的方法添加到队列连接中,它们按该顺序运行。这一直很有效。但是,根据测试的顺序(顺序可以是任何顺序),我的应用程序将停止(它不会冻结,但不会完成调用队列中其余的测试)。例如,如果运行序列[test1,test2,test3]。我将能够运行并完成(发出finish信号)test1和test2,但是test3不会被调用。然而,这种情况只是有时发生,并非总是如此。我认为线程在所有任务完成之前就退出了。有什么事我应该清理一下吗?在

相关代码如下:

    # Initialize QThread
    self.obj = signalTest.Worker()
    self.thread = QThread()
    self.obj.moveToThread(self.thread)
    self.obj.finished.connect(self.signalFinished)

def runTests(self) # This is triggered by clicking a button
    self.thread.start()
    for index in range(0, len(sequence)):
        if self.queue[index] == 'test1'
            QMetaObject.invokeMethod(self.obj, 'run_test1', Qt.QueuedConnection,
                                     Q_ARG(int, index)
        elif self.queue[index] == 'test2'
            QMetaObject.invokeMethod(self.obj, 'run_test2', Qt.QueuedConnection)
        elif self.queue[index] == 'test3'
            QMetaObject.invokeMethod(self.obj, 'run_test3', Qt.QueuedConnection)

@pyqtSlot(int)
def signalFinished(self, row)
    # Do something here

工作线程:

^{pr2}$

Tags: runselfobj应用程序indexqueue顺序qt