相关疑难解决方法(0)

PyQt:moveToThread在使用partial()作为插槽时不起作用

我正在构建一个运行生产者(工作者)的小型GUI应用程序,GUI按需消耗输出并绘制它(使用pyqtgraph).

由于生产者是一个阻塞函数(运行需要一段时间),我(据说)将它移动到自己的线程.

从生产者调用QThread.currentThreadId()时,它输出与主GUI线程相同的编号.因此,首先执行worker,然后执行所有绘图函数调用(因为它们在同一线程的事件队列中排队).我怎样才能解决这个问题?

示例运行部分:

gui thread id 140665453623104
worker thread id: 140665453623104
Run Code Online (Sandbox Code Playgroud)

这是我的完整代码:

from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import pyqtSignal
import pyqtgraph as pg
import numpy as np

from functools import partial
from Queue import Queue
import math
import sys
import time


class Worker(QtCore.QObject):

    termino = pyqtSignal()

    def __init__(self, q=None, parent=None):
        super(Worker, self).__init__(parent) 
        self.q = q

    def run(self, m=30000):
        print('worker thread id: {}'.format(QtCore.QThread.currentThreadId()))
        for x in xrange(m):
            #y = math.sin(x)
            y = x**2
            time.sleep(0.001) # Weird, plotting stops …
Run Code Online (Sandbox Code Playgroud)

python qt multithreading pyqt pyqt4

2
推荐指数
1
解决办法
2754
查看次数

标签 统计

multithreading ×1

pyqt ×1

pyqt4 ×1

python ×1

qt ×1