怎么将这个串口接收的数据self.ser = serial.Serial("COM8", 115200) data = self.ser.readline().decode().strip() data_list = data.split()加入到ui更新曲线数据中new_data = np.random.rand() # 将数据添加到数据列表中 self.data.append(new_data) # 更新曲线数据 self.data_line.setData(np.arange(len(self.data)), self.data)
时间: 2024-03-09 16:45:54 浏览: 15
可以将串口接收到的数据 `data_list` 转换成浮点数列表,然后将其添加到数据列表 `self.data` 中,最后使用 `setData()` 方法更新曲线数据。
具体代码如下:
```python
self.ser = serial.Serial("COM8", 115200)
data = self.ser.readline().decode().strip()
data_list = data.split()
float_list = [float(x) for x in data_list] # 将字符串列表转换为浮点数列表
self.data.extend(float_list) # 将数据添加到数据列表中
self.data_line.setData(np.arange(len(self.data)), self.data) # 更新曲线数据
```
这样,每次从串口接收到数据后,就会将其转换为浮点数列表,并添加到数据列表中,然后更新曲线数据。
相关问题
pyqt5怎么设置数据框,用来显示def get_data(): ser = serial.Serial('COM3', 9600) data = ser.readline() if data: print(data) ser.close() return data
你可以使用QTableWidget来设置数据框,示例代码如下:
```python
import sys
import serial
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建表格
self.table = QTableWidget(self)
self.table.setColumnCount(1) # 设置列数为1
# 调用获取数据函数
data = self.get_data()
if data:
# 插入数据到表格
row_position = self.table.rowCount()
self.table.insertRow(row_position)
self.table.setItem(row_position, 0, QTableWidgetItem(data.decode()))
# 设置表格大小和标题
self.table.resize(400, 300)
self.table.setWindowTitle('数据框')
self.setCentralWidget(self.table)
def get_data(self):
ser = serial.Serial('COM3', 9600)
data = ser.readline()
if data:
print(data)
ser.close()
return data
if __name__ == '__main__':
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
```
这段代码会创建一个有一列的表格,表格大小为400*300。然后调用get_data()函数,获取串口数据,并将数据插入到表格中。注意,get_data()函数返回的是bytes类型的数据,需要使用decode()将其转换为字符串。
def get_data(self): ser = serial.Serial('COM3', 9600) data = ser.readline() if data: # 将字符串按空格分割,并取第三个元素作为数值 value_str = data.decode().strip().split()[1] value = float(value_str) ser.close() # 将数值设置给 QLCDNumber 控件 self.lcd_1.display(value)怎么改为一直获取
你可以将上述代码包装在一个循环中,以便程序可以持续获取数据并更新 QLCDNumber 控件的显示。示例代码如下:
```
import serial
from PyQt5.QtCore import QThread, pyqtSignal
class DataThread(QThread):
valueUpdated = pyqtSignal(float)
def run(self):
ser = serial.Serial('COM3', 9600)
while True:
data = ser.readline()
if data:
# 将字符串按空格分割,并取第三个元素作为数值
value_str = data.decode().strip().split()[1]
value = float(value_str)
self.valueUpdated.emit(value)
ser.close()
```
在主程序中,你可以创建一个 DataThread 对象,并将它的 valueUpdated 信号连接到 QLCDNumber 控件的 display() 方法,以便更新显示。示例代码如下:
```
from PyQt5.QtWidgets import QApplication, QLCDNumber, QVBoxLayout, QWidget
from PyQt5.QtGui import QFont
import sys
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.lcd_1 = QLCDNumber(self)
self.lcd_1.setDigitCount(5)
self.lcd_1.setSegmentStyle(QLCDNumber.Flat)
self.lcd_1.setStyleSheet("background-color: black; color: white;")
self.lcd_1.setFont(QFont("Arial", 72))
layout = QVBoxLayout(self)
layout.addWidget(self.lcd_1)
self.thread = DataThread()
self.thread.valueUpdated.connect(self.lcd_1.display)
self.thread.start()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
运行程序后,你应该能够看到 QLCDNumber 控件不断更新显示,以反映从串口接收到的数据。