使用 QThread 定位函数

问题描述 投票:0回答:1

我知道这个结构

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
python multithreading pyqt5 qthread
1个回答
2
投票

您可以将函数添加到

__init__
中的自定义参数,为其引用创建一个实例属性,然后在
run
中运行它。

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

def stuff():
    # do something

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

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

© www.soinside.com 2019 - 2024. All rights reserved.