在我的ui界面中我有一个按键触发的用法,按下按键后会执行其中的一个while循环进行接收串口数据并写入队列表;另一个比较重要的用法是通过QTimer定时器10ms触发一次的接收串口数据并实时更新的绘制折线图用法。当我按下按键后,程序进入while循环进行接收串口数据并进行写入对列,但是此时折线图不再更新了直到while结束,两个用法使用的是同一个串口,有什么建议或者办法可以让两个用法同时进行吗?
时间: 2024-03-12 16:49:35 浏览: 18
你可以将串口读取的代码放在一个单独的线程中运行,这样就可以避免阻塞主线程从而造成折线图不更新的问题。具体地,你可以将串口读取的代码封装成一个函数,然后在一个新的线程中运行这个函数。这样,在主线程中你可以继续使用QTimer定时器来更新折线图,而串口读取的代码则在另一个线程中运行,不会阻塞主线程。
下面是一个简单的示例代码:
```python
import threading
import time
# 串口读取函数,将读取到的数据写入队列
def read_serial(ser, queue):
while True:
data = ser.read()
queue.put(data)
# 在主线程中定时更新折线图
def update_plot():
while True:
# 更新折线图的代码
time.sleep(0.01)
# 主程序
if __name__ == '__main__':
# 初始化串口和队列
ser = Serial(...)
queue = Queue()
# 创建一个新的线程来读取串口数据
t = threading.Thread(target=read_serial, args=(ser, queue))
t.start()
# 在主线程中定时更新折线图
update_plot()
```
在这个示例代码中,我们创建了一个新的线程来运行read_serial函数,这个函数会不断读取串口数据并将其写入队列中。在主线程中,我们使用QTimer定时器来定时更新折线图。这样,即使串口读取的代码在运行,也不会阻塞主线程的更新操作,从而实现了两个用法的同时进行。