【发布时间】:2017-10-10 07:03:35
【问题描述】:
我在 Windows 上用 PyQt 编写了一个 GUI 程序。我的程序中有一些昂贵的操作。在运行这些操作时,程序会在程序栏中显示“未响应”。
我觉得应该是这个操作阻塞了主线程来更新UI,所以我用QThread写了多线程代码来测试一下,还是没有意义。
我写了一个小程序来测试它,操作根本没有在新线程中运行,这是我的小测试代码:
from PyQt5.QtCore import QThread, QObject, QCoreApplication, qDebug, QTimer
class Worker(QObject):
def on_timeout(self):
qDebug('Worker.on_timeout get called from: %s' % hex(int(QThread.currentThreadId())))
if __name__ == '__main__':
import sys
app = QCoreApplication(sys.argv)
qDebug('From main thread: %s' % hex(int(QThread.currentThreadId())))
t = QThread()
qDebug(t)
worker = Worker()
timer = QTimer()
timer.timeout.connect(worker.on_timeout)
timer.start(1000)
timer.moveToThread(t)
worker.moveToThread(t)
t.start()
app.exec_()
这是输出:
From main thread: 0x634
Worker.on_timeout get called from: 0x634
【问题讨论】:
-
你试过我的答案了吗?如果您觉得它有用,请将其标记为已接受(即单击勾号)。
标签: python multithreading pyqt qthread