一般来说,Pyqt5和Pyside2模块基本能够相互替换,但是我在后者的类中没有找到串口QtSerialPort类.有明白的同学希望能在评论交流,谢谢!
GUI界面
文章图片
.py代码
import sys
from ui_serialPort import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets, QtSerialPortclass MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)self.serial = QtSerialPort.QSerialPort(self)
self.ui.pushButton_send.setEnabled(False)
self.ui.comboBox_baud.setCurrentIndex(1)self.slot_init()def slot_init(self):
self.ui.pushButton_serial.clicked.connect(self.pushButton_serial_clicked)
self.ui.pushButton_search.clicked.connect(self.pushButton_search_clicked)
self.ui.pushButton_send.clicked.connect(self.pushButton_send_clicked)
self.ui.pushButton_clear.clicked.connect(self.pushButton_clear_clicked)
self.serial.readyRead.connect(self.serialPort_readyRead)def serialPort_readyRead(self):
buffer = self.serial.read(1)
print(buffer)buffer = str(buffer, encoding='utf-8')
recStr = self.ui.textEdit_rece.toPlainText()
recStr += buffer
self.ui.textEdit_rece.clear()
self.ui.textEdit_rece.append(recStr)def pushButton_send_clicked(self):
data = https://www.it610.com/article/bytes(self.ui.textEdit_send.toPlainText(), encoding='utf-8')
data = https://www.it610.com/article/QtCore.QByteArray(data)
self.serial.write(data)def pushButton_clear_clicked(self):
self.ui.textEdit_rece.clear()def pushButton_search_clicked(self):
self.ui.comboBox_port.clear()for i in QtSerialPort.QSerialPortInfo.availablePorts():# 静态函数
self.ui.comboBox_port.addItem(i.portName())def pushButton_serial_clicked(self):
if self.ui.pushButton_serial.text() == str("打开串口"):
self.serial.setPortName(self.ui.comboBox_port.currentText())
self.serial.setBaudRate(QtSerialPort.QSerialPort.Baud115200)
self.serial.setDataBits(QtSerialPort.QSerialPort.Data8)
self.serial.setParity(QtSerialPort.QSerialPort.NoParity)
self.serial.setStopBits(QtSerialPort.QSerialPort.OneStop)
self.serial.setFlowControl(QtSerialPort.QSerialPort.NoFlowControl)self.ui.pushButton_serial.setText("关闭串口")
if not self.serial.open(QtCore.QIODevice.ReadWrite):
QtWidgets.QMessageBox.about(self,"提示","无法打开串口!")
returnself.ui.comboBox_baud.setEnabled(False)
self.ui.comboBox_data.setEnabled(False)
self.ui.comboBox_port.setEnabled(False)
self.ui.comboBox_stop.setEnabled(False)
self.ui.comboBox_test.setEnabled(False)self.ui.pushButton_send.setEnabled(True)
elif self.ui.pushButton_serial.text() == str("关闭串口"):
self.serial.close()
self.ui.pushButton_serial.setText("打开串口")self.ui.comboBox_baud.setEnabled(True)
self.ui.comboBox_data.setEnabled(True)
self.ui.comboBox_port.setEnabled(True)
self.ui.comboBox_stop.setEnabled(True)
self.ui.comboBox_test.setEnabled(True)self.ui.pushButton_send.setEnabled(False)if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()sys.exit(app.exec_())
.ui生成的代码 这里强烈推荐使用Qt designer画出的.ui文件直接生成.py代码,不会的同学查看 这里.
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'ui_serialPort.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(410, 343)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayout_8 = QtWidgets.QHBoxLayout(self.centralwidget)
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.label_rece = QtWidgets.QLabel(self.centralwidget)
self.label_rece.setObjectName("label_rece")
self.verticalLayout_3.addWidget(self.label_rece)
self.textEdit_rece = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_rece.setObjectName("textEdit_rece")
self.verticalLayout_3.addWidget(self.textEdit_rece)
self.label_send = QtWidgets.QLabel(self.centralwidget)
self.label_send.setObjectName("label_send")
self.verticalLayout_3.addWidget(self.label_send)
self.textEdit_send = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_send.setObjectName("textEdit_send")
self.verticalLayout_3.addWidget(self.textEdit_send)
self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.pushButton_clear = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_clear.setObjectName("pushButton_clear")
self.horizontalLayout_6.addWidget(self.pushButton_clear)
self.pushButton_send = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_send.setObjectName("pushButton_send")
self.horizontalLayout_6.addWidget(self.pushButton_send)
self.verticalLayout_3.addLayout(self.horizontalLayout_6)
self.horizontalLayout_7.addLayout(self.verticalLayout_3)
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label_port = QtWidgets.QLabel(self.centralwidget)
self.label_port.setObjectName("label_port")
self.horizontalLayout.addWidget(self.label_port)
self.comboBox_port = QtWidgets.QComboBox(self.centralwidget)
self.comboBox_port.setObjectName("comboBox_port")
self.horizontalLayout.addWidget(self.comboBox_port)
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label_baud = QtWidgets.QLabel(self.centralwidget)
self.label_baud.setObjectName("label_baud")
self.horizontalLayout_2.addWidget(self.label_baud)
self.comboBox_baud = QtWidgets.QComboBox(self.centralwidget)
self.comboBox_baud.setObjectName("comboBox_baud")
self.comboBox_baud.addItem("")
self.comboBox_baud.addItem("")
self.horizontalLayout_2.addWidget(self.comboBox_baud)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.label_data = https://www.it610.com/article/QtWidgets.QLabel(self.centralwidget)
self.label_data.setObjectName("label_data")
self.horizontalLayout_3.addWidget(self.label_data)
self.comboBox_data = https://www.it610.com/article/QtWidgets.QComboBox(self.centralwidget)
self.comboBox_data.setObjectName("comboBox_data")
self.comboBox_data.addItem("")
self.horizontalLayout_3.addWidget(self.comboBox_data)
self.verticalLayout.addLayout(self.horizontalLayout_3)
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.label_test = QtWidgets.QLabel(self.centralwidget)
self.label_test.setObjectName("label_test")
self.horizontalLayout_4.addWidget(self.label_test)
self.comboBox_test = QtWidgets.QComboBox(self.centralwidget)
self.comboBox_test.setObjectName("comboBox_test")
self.comboBox_test.addItem("")
self.horizontalLayout_4.addWidget(self.comboBox_test)
self.verticalLayout.addLayout(self.horizontalLayout_4)
self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.label_stop = QtWidgets.QLabel(self.centralwidget)
self.label_stop.setObjectName("label_stop")
self.horizontalLayout_5.addWidget(self.label_stop)
self.comboBox_stop = QtWidgets.QComboBox(self.centralwidget)
self.comboBox_stop.setObjectName("comboBox_stop")
self.comboBox_stop.addItem("")
self.horizontalLayout_5.addWidget(self.comboBox_stop)
self.verticalLayout.addLayout(self.horizontalLayout_5)
self.verticalLayout_2.addLayout(self.verticalLayout)
self.pushButton_search = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_search.setObjectName("pushButton_search")
self.verticalLayout_2.addWidget(self.pushButton_search)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem)
self.pushButton_serial = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_serial.setObjectName("pushButton_serial")
self.verticalLayout_2.addWidget(self.pushButton_serial)
self.horizontalLayout_7.addLayout(self.verticalLayout_2)
self.horizontalLayout_8.addLayout(self.horizontalLayout_7)
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label_rece.setText(_translate("MainWindow", "接受窗口"))
self.label_send.setText(_translate("MainWindow", "发送窗口"))
self.pushButton_clear.setText(_translate("MainWindow", "清空接受"))
self.pushButton_send.setText(_translate("MainWindow", "发送数据"))
self.label_port.setText(_translate("MainWindow", "串口号:"))
self.label_baud.setText(_translate("MainWindow", "波特率:"))
self.comboBox_baud.setItemText(0, _translate("MainWindow", "9600"))
self.comboBox_baud.setItemText(1, _translate("MainWindow", "115200"))
self.label_data.setText(_translate("MainWindow", "数据位:"))
self.comboBox_data.setItemText(0, _translate("MainWindow", "8"))
self.label_test.setText(_translate("MainWindow", "校验位:"))
self.comboBox_test.setItemText(0, _translate("MainWindow", "0"))
self.label_stop.setText(_translate("MainWindow", "停止位:"))
self.comboBox_stop.setItemText(0, _translate("MainWindow", "1"))
self.pushButton_search.setText(_translate("MainWindow", "检测串口"))
self.pushButton_serial.setText(_translate("MainWindow", "打开串口"))
参考 【Python|Python-Qt简单串口通讯】1.Using Qt Designer
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)