基于pyqt的上位机开发

目录

安装依赖

功能包含

运行结果


安装依赖

bash 复制代码
pip install pyqt5 pyqtgraph pyserial 

功能包含

自动检测串口设备,波特率选择/连接断开控制,数据发送/接收基础框架,实时绘图区域(需配合数据解析)

python 复制代码
"""
PyQt5 上位机基础框架
功能:串口通信+数据可视化+基础控件
"""
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo
import pyqtgraph as pg


class SerialMonitor(QMainWindow):
    def __init__(self):
        super().__init__()

        self.serial = QSerialPort()
        self.initUI()
        self.initSerial()

    def initUI(self):
        self.setWindowTitle("Serial Monitor")
        self.setGeometry(300, 300, 800, 600)

        # 中央控件
        central = QWidget()
        self.setCentralWidget(central)
        layout = QHBoxLayout(central)

        # 左侧控制面板
        controlPanel = QGroupBox("串口设置")
        controlLayout = QVBoxLayout()
        self.portCombo = QComboBox()
        self.baudCombo = QComboBox()
        self.connectBtn = QPushButton("打开串口")
        self.sendText = QLineEdit()
        self.sendBtn = QPushButton("发送数据")

        # 填充控件
        self.baudCombo.addItems(['9600', '115200', '230400'])
        controlLayout.addWidget(QLabel("端口:"))
        controlLayout.addWidget(self.portCombo)
        controlLayout.addWidget(QLabel("波特率:"))
        controlLayout.addWidget(self.baudCombo)
        controlLayout.addWidget(self.connectBtn)
        controlLayout.addWidget(QLabel("发送数据:"))
        controlLayout.addWidget(self.sendText)
        controlLayout.addWidget(self.sendBtn)
        controlPanel.setLayout(controlLayout)

        # 右侧绘图区域
        self.plotWidget = pg.PlotWidget()
        self.plotWidget.setBackground('w')
        self.curve = self.plotWidget.plot(pen='b')

        layout.addWidget(controlPanel, 1)
        layout.addWidget(self.plotWidget, 3)

        # 信号连接
        self.connectBtn.clicked.connect(self.toggleSerial)
        self.sendBtn.clicked.connect(self.sendData)
        self.serial.readyRead.connect(self.readData)

    def initSerial(self):
        ports = QSerialPortInfo.availablePorts()
        self.portCombo.clear()
        for port in ports:
            self.portCombo.addItem(port.portName())

    def toggleSerial(self):
        if self.serial.isOpen():
            self.serial.close()
            self.connectBtn.setText("打开串口")
        else:
            self.serial.setPortName(self.portCombo.currentText())
            self.serial.setBaudRate(int(self.baudCombo.currentText()))
            if self.serial.open(QSerialPort.ReadWrite):
                self.connectBtn.setText("关闭串口")

    def readData(self):
        data = self.serial.readAll().data()
        # 示例:显示原始数据(需根据协议解析)
        print(data.decode('ascii', errors='replace'))

    def sendData(self):
        text = self.sendText.text().encode()
        if self.serial.isOpen():
            self.serial.write(text)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = SerialMonitor()
    window.show()
    sys.exit(app.exec_())

运行结果

相关推荐
asdfg1258963几秒前
JS中的闭包应用
开发语言·前端·javascript
长安牧笛8 分钟前
心理健康情绪日记分析系统,用户输入文字日记后,AI提取情绪关键词,焦虑/愉悦等,生成周情绪波动曲线,并推荐调节建议。
python
代码or搬砖33 分钟前
Java集合-Set讲解
java·开发语言
艾上编程34 分钟前
第三章——爬虫工具场景之Python爬虫实战:学术文献摘要爬取,助力科研高效进行
开发语言·爬虫·python
明洞日记41 分钟前
【数据结构手册008】STL容器完全参考指南
开发语言·数据结构·c++
Hi_kenyon44 分钟前
FastAPI+VUE3创建一个项目的步骤模板(二)
python·fastapi
拉普拉斯妖1081 小时前
DAY38 Dataset和DataLoader
python
jllllyuz1 小时前
matlab使用B样条进行曲线曲面拟合
开发语言·matlab
Michelle80232 小时前
24大数据 16-1 函数复习
python
dagouaofei2 小时前
AI自动生成PPT工具对比分析,效率差距明显
人工智能·python·powerpoint