首页 > 解决方案 > 使用 QThread 定位函数

问题描述

我知道这个结构

class MyThread(QThread):
    def __init__(self):
        super().__init__()
    
    def run():
       # do stuff

t = MyThread()
t.start()

使用常规threading.Thread,您可以执行以下操作:

def stuff():
    # do stuff

t = threading.Thread(target=stuff)
t.start()

有什么方法可以在 pyqt5 中使用 QThreads 做到这一点?像这样的东西:

t = Qthread(target=stuff)
t.start()

我试过了,但我得到了这个错误:

TypeError: 'target' is an unknown keyword argument

标签: pythonmultithreadingpyqt5qthread

解决方案


您可以将函数添加到 中的自定义参数,__init__为其引用创建实例属性,然后在run.

class MyThread(QThread):
    def __init__(self, target=None):
        super().__init__()
        self.target = target
    
    def run():
        if self.target:
            self.target()

def stuff():
    # do something

t = MyThread(target=stuff)
t.start()

请注意,在外部线程中不允许访问 UI 元素,因此不要使用线程函数做任何与 UI 相关的事情:读取值和属性是不可靠的,写入会导致程序崩溃。


推荐阅读