一、QT designer设计界面
就一个label,一个comboBox简单实现一下
二、代码
生成assistant.py
命令行实现转换(记得cd到assistant.ui的路径下并激活相关环境)
pyuic5 -o assistant.py assistant.ui
assistant.py代码
主要功能实现在main.py中,assistant.py文件内容没做任何修改
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(772, 551)
self.comboBox_port = QtWidgets.QComboBox(Form)
self.comboBox_port.setGeometry(QtCore.QRect(250, 240, 99, 24))
self.comboBox_port.setObjectName("comboBox_port")
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(160, 240, 81, 18))
self.label.setObjectName("label")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label.setText(_translate("Form", "串口选择"))
main.py
主要逻辑是采用定时器以1s的间隔读取上位机端口,当检测到端口数据改变时,刷新端口
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QWidget,QFileDialog
from assistant import Ui_Form
import serial
import serial.tools.list_ports
from PyQt5.QtSerialPort import QSerialPort,QSerialPortInfo
from PyQt5.QtCore import QTimer
class MainForm (QWidget,Ui_Form):
def __init__(self):
"""
MainForm构造函数
"""
super(MainForm,self).__init__()
self.setupUi(self)
self.ser = None # 串口初始化为None
self.timer = QTimer(self) #实例化一个定时器
self.timer.timeout.connect(self.refresh) #定时器结束后触发refresh
self.timer.start(300) # 开启定时器,间隔0.3s
def refresh(self):
port_list = self.get_port_list()
num = len(port_list)
# print(num)
num_last = self.comboBox_port.count()
#print(num_last)
if(num != num_last):
self.comboBox_port.clear()
self.comboBox_port.addItems(self.get_port_list()) # 重新设置端口下拉列表
@staticmethod
# 获取端口号
def get_port_list():
"""
获取当前系统所有COM口
:return:
"""
com_list = [] # 用于保存端口名的列表
port_list = serial.tools.list_ports.comports() # 获取本机端口,返回list
for port in port_list:
com_list.append(port[0]) # 保存端口到列表
return com_list # 返回列表
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MainForm()
win.show()
sys.exit(app.exec_())
运行结果展示
至此,实现实时监测上位机串口