我知道这个结构
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
您可以将函数添加到
__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相关的操作:读取值和属性不可靠,写入可能会导致程序崩溃。