QThread不发出finished符号

2024-10-02 10:30:31 发布

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

我从另一个QThread运行QThread。第二个线程的finished信号未发出。为什么?在

from PyQt4 import QtGui, QtCore
import sys, time
thd, thd2 = None, None

class T(QtCore.QThread):
    def __init__(self, f):
        super().__init__()
        self.f = f
    def run(self):
        self.f()

def newThread(f, fin):
    t = T(f)
    t.finished.connect(fin)
    t.start()
    return t

def threadInThread():
    print("Run.")
    global thd2
    thd2 = newThread(lambda: print("Run2."), lambda: print("Fin2."))
    time.sleep(2)

class Form(QtGui.QWidget):
    def __init__(self):
        super().__init__()
        global thd
        thd = newThread(threadInThread, lambda: print("Fin."))

app = QtGui.QApplication(sys.argv)
f = Form()
f.show()
app.exec_()

Tags: lambdaimportselftimeinitdefsysprint
1条回答
网友
1楼 · 发布于 2024-10-02 10:30:31

将QThread对象移动到主线程可以工作(如果我们将finished连接到此对象的插槽)。在

class T(QtCore.QThread):
    def __init__(self, f, finish=None):
        super().__init__()
        self.moveToThread(QtCore.QCoreApplication.instance().thread())
        self.f = f
        if finish:
            self.finish = finish
            self.finished.connect(self.onfinish)
    def onfinish(self):
        self.finish()
    def run(self):
        self.f()

相关问题 更多 >

    热门问题