Python 以QThread为目标函数

Python 以QThread为目标函数,python,multithreading,pyqt5,qthread,Python,Multithreading,Pyqt5,Qthread,我知道这个结构 类MyThread(QThread): 定义初始化(自): super()。\uuuu init\uuuuu() def run(): #做事 t=MyThread() t、 开始() 使用常规线程。线程可以执行以下操作: def stuff(): #做事 t=线程。线程(目标=填充) t、 开始() 在pyqt5中使用QThreads可以实现这一点吗?大概是这样的: t=Qthread(target=stuff) t、 开始() 我试过了,但出现了以下错误: TypeEr

我知道这个结构

类MyThread(QThread):
定义初始化(自):
super()。\uuuu init\uuuuu()
def run():
#做事
t=MyThread()
t、 开始()
使用常规
线程。线程
可以执行以下操作:

def stuff():
#做事
t=线程。线程(目标=填充)
t、 开始()
在pyqt5中使用QThreads可以实现这一点吗?大概是这样的:

t=Qthread(target=stuff)
t、 开始()
我试过了,但出现了以下错误:

TypeError: 'target' is an unknown keyword argument

您可以将该函数添加到
\uuuu init\uuu
中的自定义参数中,为其引用创建一个实例属性,然后在
运行中运行它

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相关的操作:读取值和属性是不可靠的,写入会导致程序崩溃。

谢谢,我明白了。但是,在Qthread中难道没有一种内置的方法可以做到这一点吗?(不创建类)@lordcommander不适用于简单函数。另一种方法是创建一个QThread并将其
启动的
信号连接到函数,但这基本上是一样的,通常不会提供真正的好处。好的,谢谢。