PyQt串口助手开发教程:打造您的专属串口调试工具
PyQt串口助手开发教程:打造您的专属串口调试工具
简介
本教程将带领您使用PyQt库从零开始创建一个功能实用的串口助手程序。您将学习如何利用PyQt设计用户界面,使用pyserial库进行串口通信,以及实现数据发送、接收和显示等核心功能。
准备工作
在开始之前,请确保您已安装以下Python库:
- PyQt5: 用于创建图形用户界面- pyserial: 用于与串口进行通信
您可以使用以下命令安装它们:bashpip install PyQt5 pyserial
代码实现
以下是一个使用PyQt编写的简单串口助手程序示例:pythonimport sysimport serialfrom PyQt5.QtWidgets import QApplication, QWidget, QLabel, QTextEdit, QPushButton, QVBoxLayout, QHBoxLayout, QComboBoxfrom PyQt5.QtCore import QTimer
class SerialAssistant(QWidget): def init(self): super().init() self.setWindowTitle('Serial Assistant') self.setGeometry(100, 100, 400, 300)
self.lbl_port = QLabel('Port:', self) self.cmb_port = QComboBox(self) self.cmb_port.addItems(['COM1', 'COM2', 'COM3']) # 添加可选串口号
self.lbl_baudrate = QLabel('Baudrate:', self) self.cmb_baudrate = QComboBox(self) self.cmb_baudrate.addItems(['9600', '115200']) # 添加可选波特率
self.lbl_received = QLabel('Received:', self) self.txt_received = QTextEdit(self) self.txt_received.setReadOnly(True)
self.lbl_send = QLabel('Send:', self) self.txt_send = QTextEdit(self)
self.btn_open = QPushButton('Open', self) self.btn_open.clicked.connect(self.open_port)
self.btn_send = QPushButton('Send', self) self.btn_send.clicked.connect(self.send_data)
layout = QVBoxLayout() layout.addLayout(self.create_port_layout()) layout.addLayout(self.create_received_layout()) layout.addLayout(self.create_send_layout()) layout.addWidget(self.btn_open) layout.addWidget(self.btn_send)
self.setLayout(layout)
self.serial_port = None
def create_port_layout(self): layout = QHBoxLayout() layout.addWidget(self.lbl_port) layout.addWidget(self.cmb_port) layout.addWidget(self.lbl_baudrate) layout.addWidget(self.cmb_baudrate) return layout
def create_received_layout(self): layout = QVBoxLayout() layout.addWidget(self.lbl_received) layout.addWidget(self.txt_received) return layout
def create_send_layout(self): layout = QVBoxLayout() layout.addWidget(self.lbl_send) layout.addWidget(self.txt_send) return layout
def open_port(self): try: port = self.cmb_port.currentText() baudrate = int(self.cmb_baudrate.currentText()) self.serial_port = serial.Serial(port, baudrate, timeout=1) print('Port opened successfully')
except Exception as e: print('Error opening port:', str(e))
def send_data(self): try: if self.serial_port and self.serial_port.isOpen(): data = self.txt_send.toPlainText().encode() self.serial_port.write(data) print('Data sent successfully')
except Exception as e: print('Error sending data:', str(e))
def receive_data(self): try: if self.serial_port and self.serial_port.isOpen(): data = self.serial_port.readline() if data: self.txt_received.append(data.decode())
except Exception as e: print('Error receiving data:', str(e))
def closeEvent(self, event): if self.serial_port and self.serial_port.isOpen(): self.serial_port.close() event.accept()
if name == 'main': app = QApplication(sys.argv) serial_assistant = SerialAssistant() serial_assistant.show()
timer = QTimer() timer.timeout.connect(serial_assistant.receive_data) timer.start(100) # 每100ms接收一次数据
sys.exit(app.exec_())
代码解析
-
导入模块: 首先,我们导入必要的模块,包括
sys、serial、PyQt5.QtWidgets、PyQt5.QtCore。 -
创建主窗口:
SerialAssistant类继承自QWidget,用于创建程序的主窗口。 -
初始化界面: 在
__init__方法中,我们初始化了窗口标题、大小以及各个控件,包括串口选择下拉框、波特率选择下拉框、发送和接收文本框、打开串口按钮、发送数据按钮等。 -
布局管理: 使用
QVBoxLayout和QHBoxLayout对控件进行布局,使其在窗口中合理排列。 -
打开串口:
open_port方法用于打开选定的串口,并设置波特率。 -
发送数据:
send_data方法将发送文本框中的数据编码后通过串口发送出去。 -
接收数据:
receive_data方法利用定时器定时读取串口数据,并将接收到的数据解码后显示在接收文本框中。 -
关闭串口:
closeEvent方法确保在关闭窗口时关闭已打开的串口。
总结
通过本教程,您学习了如何使用PyQt和pyserial库创建一个简单的串口助手程序。您可以根据自己的需求扩展程序的功能,例如添加更多串口设置选项、实现数据格式化显示等。希望这篇教程能够帮助您入门串口通信编程,并打造出属于您自己的串口调试工具!
原文地址: https://www.cveoy.top/t/topic/YlC 著作权归作者所有。请勿转载和采集!