我现在有一个ui界面的一个类中主要做两个事,一个是使用QtCore.QTimer()每10毫秒更新一次串口数据绘制的图像,另一个是按下按键后调用类中的另·一个函数接收串口数据并将串口数据进行写入excel并处理数据。现在的问题是按下按键后绘图就停止工作了,有什么办法可以让他们之间同时进行吗
时间: 2024-03-12 09:45:57 浏览: 79
QT实时绘制串口数据
你可以使用多线程来同时进行这两个任务。将每10毫秒更新一次串口数据绘制的图像这个任务放在主线程中,而按下按键后调用类中的另一个函数接收串口数据并将串口数据进行写入excel并处理数据这个任务放在子线程中。这样就可以同时进行这两个任务了。
具体实现方法如下:
1. 在类的初始化函数中创建一个QThread对象,并将该对象设置为类的属性
```python
self.thread = QThread()
```
2. 将子线程的函数定义为类的一个方法,并将该方法移到子线程中执行。在该方法中接收串口数据并将串口数据进行写入excel并处理数据。
```python
def receive_data(self):
# 接收串口数据并将串口数据进行写入excel并处理数据
...
```
3. 创建一个QTimer对象,并将该对象的timeout信号连接到主线程中更新串口数据绘制的图像的方法。
```python
self.timer = QTimer()
self.timer.timeout.connect(self.update_data)
```
4. 将子线程的函数移动到子线程中执行,并启动子线程。
```python
self.worker.moveToThread(self.thread)
self.thread.started.connect(self.worker.receive_data)
self.thread.start()
```
5. 按下按键后,通过信号槽机制将信号发送到子线程中执行接收串口数据并将串口数据进行写入excel并处理数据。
```python
self.pushButton.clicked.connect(self.worker.receive_data)
```
这样就可以在两个任务之间同时进行了。
阅读全文