基于pyqt开发串口和对应映射值(path)的显示工具

实现方案(保姆教程):

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生成的页面代码自己生成哈):

python 复制代码
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_())

效果如下:

总结:

感谢各位看官,要是有疑问,可以随时讨论!

相关推荐
wuyk5551 天前
PyQt6-第10讲-PDF工具箱
python·microsoft·pdf·pyqt
wuyk5551 天前
PyQt6-第14讲-数据库与Excel双向同步
数据库·python·ui·excel·pyqt
MrWind灬2 天前
我给自己写了个 Kafka 桌面客户端:MrWindKafkaClient
kafka·pyqt
万粉变现经纪人3 天前
如何解决 pip install 安装报错 检测到 yanked 版本需更换可用版本 问题
人工智能·python·scrapy·numpy·pandas·pyqt·pip
MoRanzhi12035 天前
第6篇(下)· 使用 PyQt5 实现 2048 高性能计算版:统一运行控制与跨模式安全交接
python·pyqt·进程管理·状态机·软件架构·并发控制·数据一致性
wuyk5556 天前
PyQt6-第06讲-主窗口框架
python·pyqt
MoRanzhi12037 天前
第6篇(中)· 使用 PyQt5 实现 2048 高性能计算版:无头后台求解与三档运行模式
python·pyqt·数据持久化·多进程·进程间通讯·后台任务·断点续跑
wuyk55512 天前
PyQt6-第05讲-QtDesigner工作流与ui文件
python·ui·pyqt
金融小师妹12 天前
多因子时间序列分析:美元与美债收益率变化对黄金价格+1.6%的影响
c语言·人工智能·git·决策树·pyqt
金融小师妹12 天前
事件驱动分析模型:9月PPI超预期与美联储利率预期对黄金价格的影响
人工智能·云计算·线性回归·pyqt