实现方案(保姆教程):
1、搭建上位机的开发环境,具体的看一看【python上位机开发】1、安装开发环境-CSDN博客
2、使用pyserial获取当前电脑的已连接的串口信息
3、对返回的信息做处理,获取其中需要的port和hwid(硬件设备信息号)
4、创建port列表和path列表,用于存放返回的信息
5、返回的port可以直接使用,path值需要从hwid分解获取,分解方法如下:
5.1 将hwid转化为str
5.2 使用split函数分割str(hwid)获得所需要的path值,存入path_list
6、QT页面做一个两列的页面,使用tableWidget去记录数据
7、并将获取到的数据依次渲染到页面中
8、创建一个定时任务,每500ms清空列表信息,获取一次串口信息,并执行数据渲染。
代码如下(仅包含核心代码,rcc生成的页面代码自己生成哈):
import sys
from PySide2.QtCore import QTimer
from PySide2.QtWidgets import QApplication, QMainWindow, QTableWidgetItem
from view import Ui_path_and_com_tool
import serial.tools.list_ports
"""
页面显示类
"""
class mainWindow(QMainWindow):
def __init__(self,parent=None):
super(mainWindow,self).__init__(parent)
self.ui = Ui_path_and_com_tool()
self.ui.setupUi(self)
app = QApplication()
ui = mainWindow()
ui.setFixedSize(ui.width(), ui.height())
port_list = []
path_list = []
timer = QTimer()
"""
获取串口号和path值
"""
def take_data():
ports = list(serial.tools.list_ports.comports(include_links=True))
for port,desc,hwid in ports:
if "USB" in hwid:
path_value = str(hwid).split("LOCATION")[1].split("-")[1]
path_list.append(path_value)
else:
pass
if port == "COM1":
pass
else:
port_list.append(port)
def write_data_port():
i = len(port_list)
n = 0
m = 0
v = 0
while i > 0:
ui.ui.tableWidget.setItem(n,m,QTableWidgetItem(port_list[v]))
n += 1
v += 1
i -= 1
def write_data_path():
ui.ui.tableWidget.setItem(0, 1, QTableWidgetItem(path_list[0]))
i = len(path_list)
n = 1
m = 1
v = 1
while i > 1:
ui.ui.tableWidget.setItem(n,m,QTableWidgetItem(path_list[v]))
i -= 1
v += 1
n += 1
def push():
ui.ui.tableWidget.clearContents()
port_list.clear()
path_list.clear()
take_data()
write_data_port()
write_data_path()
timer.setInterval(500)
timer.timeout.connect(push)
timer.start()
ui.show()
sys.exit(app.exec_())
效果如下:
总结:
感谢各位看官,要是有疑问,可以随时讨论!