python - 使用 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()
有什么方法可以在 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():
if self.target:
self.target()
def stuff():
# do something
t = MyThread(target=stuff)
t.start()
请注意,在外部线程中不允许访问 UI 元素,因此不要使用线程函数做任何与 UI 相关的事情:读取值和属性是不可靠的,写入会导致程序崩溃。
推荐阅读
- php - TYPO3 6.2 中的链接验证器(错误:403,代理验证)
- javascript - Node.js - Google Calendar API 在插入事件时显示错误“缺少结束时间”
- ios - 找到多个xcode项目,请指定一个
- json - 在空手道中使用 JavaScript 删除 JSON 对象属性
- numeric - 4次多项式插值
- python - 如何在熊猫或numpy的矩阵中的特定索引处将两个矩阵向量乘以向量
- php - 如何根据特定的键值从数组 2 中将数据提取到数组 1 中?
- ios - Cordova iOS 错误,无法安装请求的应用程序
- iis - 发布到 IIS 后找不到包“Microsoft.NETCore.App”的编译库位置 - .NET Core 2.1.1
- git - Visual Studio 项目的 .gitignore 不起作用