使用 QThread 定位函数

Target a function with 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()

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

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

我试过了,但出现了这个错误:

TypeError: 'target' is an unknown keyword argument

您可以将函数添加到 __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元素,因此不要使用线程函数做任何与[=19=相关的事情]: 读取值和属性不可靠,写入会导致程序崩溃。