python - 如何向 Qthread 发送参数

标签 python multithreading qt pyqt

我试图将参数发送到不是主线程的 Qthread。 我的主线程中有这个对象,我想将其发送到另一个线程:

q = Queue()

我想将 q 发送到此线程:

class Sender(QtCore.QThread):
def __init__(self,q):
    super(Sender,self).__init__()
    self.q=q
def run(self):

    while True:

        try: line = q.get_nowait()
         # or q.get(timeout=.1)
        except Empty: 
            pass
        else: 
           self.emit(QtCore.SIGNAL('tri()')) 

我正在尝试这个:

class Sender(QtCore.QThread):
    def __init__(self,q):
        super(Sender,self).__init__()
        self.q=q
self.sender= Sender(q)

但我收到此错误:

QObject::connect: Cannot queue arguments of type 'QTextCursor'
(Make sure 'QTextCursor' is registered using qRegisterMetaType().)

我该怎么做? 请帮忙!

最佳答案

您的QThread子类以及如何设置它来传递Queue对象都没有问题。不过我也建议传递并设置一个可选的父级作为第二个参数。

您最有可能遇到的情况是将执行 QtGui 操作(绘图相关)的对象传递到线程中。如果是这种情况,您将无法调用任何 QtGui 绘图相关的方法。它们都必须在主线程中执行。在其他线程中进行任何数据处理,然后为主线程发出信号以进行小部件更新。

查找您发送到队列中的内容,特别是您在线程内使用它执行的操作,作为错误来源的提示。在某个地方,您正在使用 QTextCursor 执行某些操作,它试图触发绘制事件并将其排队。

关于python - 如何向 Qthread 发送参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13675140/

相关文章:

ios - 调用 didEnterBackground 后是否可以在主线程上执行某些操作?

c++ - MSVC2013 和 MingW 之间的差异导致最令人烦恼的解析问题

qt - 当父级调整大小时如何更改位置?

qt - 多层 UI 小部件中的信号和插槽

python - 从 python 中的缩进文本文件创建树/深度嵌套字典

Python pandas 等效于替换

python - 欺骗Python的 `type(f(x)) is`

c++ - 使用 Boost::Python 获取指向 Python 实例的 C++ 指针

c# - IIS7 中的最大同时 HttpRequests

multithreading - LWJGL、Clojure、OpenGL 命令的单线程