使用 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=相关的事情]: 读取值和属性不可靠,写入会导致程序崩溃。
我知道这个结构
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=相关的事情]: 读取值和属性不可靠,写入会导致程序崩溃。