多线程以及在PYQT中的使用

Python的多线程使用threading库实现,创建线程、设置守护线程及线程锁是其关键。在PYQT中,多线程用于避免UI卡顿,但显示操作必须在主线程执行,可通过信号与槽机制解决子线程显示问题。

1.多线程

简单来说就是可以用多线程同时执行多个程序。

在python中,我们用的是

threading库

这个库包含了线程的方法和其他配套方法(比如锁)。似乎 concurrent库会更方便更安全,下次可以试一下并介绍它的用法。

 

一般threading库记住下面的就够用了。

创建线程

 

 

注意:kwargs传参要求用{},key和函数参数名对应。

用args传参记住用(),如果参数只有一个,最后要加一个,。 

用start()启动线程,不要用run()。run()只是运行线程内的函数,没有新开线程,相当于是在主线程中运行。start()是新开一个线程在这个线程中运行函数。

设置守护线程

 何为守护线程:当线程被设置为守护线程后,会在主线程结束时同时结束,不管线程是否执行完。

 

设置主线程阻塞到子线程执行完

PyQt中,利用多线程实现实时绘制曲线通常用于图形界面应用程序,比如数据可视化或监控应用,因为GUI操作应该在主线程中处理以保持UI的响应性和稳定性。以下是基本步骤: 1. 导入必要的库:首先需要导入`PyQt5.QtCore`模块,其中包含了QThread和QObject等用于创建线程的对象。 ```python from PyQt5 import QtCore, QtGui, QtWidgets import pyqtgraph as pg ``` 2. 创建绘图窗口和槽函数:在窗口类中定义一个槽函数用于接收和显示数据,并在主线程中绘制曲线。 ```python class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.plot_widget = pg.PlotWidget() self.setCentralWidget(self.plot_widget) self.data_signal = QtCore.pyqtSignal(list) def update_curve(self, data): # 在这里更新曲线,例如添加新点到plot self.plot_widget.plot(data) ``` 3. 创建单独的线程类:这个类将负责获取实时数据并发送给主线程。 ```python class DataThread(QtCore.QThread): def __init__(self, parent=None): super(DataThread, self).__init__(parent) self.parent = parent def run(self): while True: # 模拟获取实时数据 new_data = [random.randint(0, 100) for _ in range(len(self.parent.plot_widget.xvals))] self.parent.data_signal.emit(new_data) self.sleep(100) # 设置数据刷新间隔 ``` 4. 连接信号和槽:在线程启动后,你需要连接数据信号到主线程的槽函数,以便在主线程中更新曲线。 ```python def start_thread(self): self.thread = DataThread(self) self.thread.start() # 这里使用 moveToThread 将槽函数移动到新线程 self.data_signal.connect(self.update_curve, QtCore.Qt.QueuedConnection) self.update_curve([0] * len(self.plot_widget.xvals)) # 初始化一些数据 ``` 5. 绑定按钮或事件:最后,在主窗口上绑定一个按钮或者定时器事件来启动线程。 ```python button = QtWidgets.QPushButton("Start") button.clicked.connect(self.start_thread) layout.addWidget(button) ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值