当前位置: 首页 > news >正文

pyqt写一个单片机配置界面

        已经实现以下功能 1.可以选择单片机架构 2.选择完单片机架构后第二个框可以选择常见单片机型号 3.选择完常见单片机型号后第三个框可以选择内部资源如adc等(可以选择多个内部资源)4.选择完内部资源如adc等(可以选择多个内部资源)后,将文件名带有所选择的内部资源的.c和.h文件导入user文件夹 5.右侧文本框显示已选择的项,以及已选项的详细内容

        前提需要准备好对应的内部资源文件。

import sys
import os
import shutil
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout,QComboBox, QListWidget, QPushButton, QLabel,QPlainTextEdit)class MCUConfigurator(QWidget):def __init__(self):super().__init__()self.arch_map = {"ARM": ["STM32F103", "STM32F407", "LPC1768"],"AVR": ["ATmega328P", "ATmega2560", "ATtiny85"]}self.resources = ["ADC", "UART", "SPI", "I2C", "PWM", "GPIO"]self.initUI()self.file_dir = "source_files"self.user_dir = "user"def initUI(self):main_layout = QHBoxLayout()# 左侧配置区left_layout = QVBoxLayout()self.arch_combo = QComboBox()self.arch_combo.addItems(["选择架构"] + list(self.arch_map.keys()))self.arch_combo.currentIndexChanged.connect(self.update_devices)self.arch_combo.currentIndexChanged.connect(self.update_display)self.device_combo = QComboBox()self.device_combo.addItem("选择型号")self.device_combo.currentIndexChanged.connect(self.update_display)self.resource_list = QListWidget()self.resource_list.addItems(self.resources)self.resource_list.setSelectionMode(3)self.resource_list.itemSelectionChanged.connect(self.update_display)self.btn_export = QPushButton("生成文件")self.btn_export.clicked.connect(self.export_files)left_layout.addWidget(self.arch_combo)left_layout.addWidget(self.device_combo)left_layout.addWidget(QLabel("选择资源(多选):"))left_layout.addWidget(self.resource_list)left_layout.addWidget(self.btn_export)# 右侧显示区right_layout = QVBoxLayout()self.selected_display = QPlainTextEdit()self.selected_display.setReadOnly(True)right_layout.addWidget(QLabel("已选配置详情:"))right_layout.addWidget(self.selected_display)main_layout.addLayout(left_layout, 60)main_layout.addLayout(right_layout, 40)self.setLayout(main_layout)def update_devices(self):self.device_combo.clear()arch = self.arch_combo.currentText()self.device_combo.addItems(["选择型号"] + self.arch_map.get(arch, []))def update_display(self):arch = self.arch_combo.currentText() if self.arch_combo.currentIndex() > 0 else ""device = self.device_combo.currentText() if self.device_combo.currentIndex() > 0 else ""resources = [item.text() for item in self.resource_list.selectedItems()]display_text = f"架构:{arch}\n型号:{device}\n"display_text += "资源:" + (",".join(resources) if resources else "未选择")self.selected_display.setPlainText(display_text)def export_files(self):# 保持原有导出逻辑不变passif __name__ == '__main__':app = QApplication(sys.argv)ex = MCUConfigurator()ex.setWindowTitle("MCU配置工具")ex.resize(600, 400)ex.show()sys.exit(app.exec_())

 运行结果

相关文章:

  • 基于YOLOv的目标检测训练数据构建方法研究—图像采集、标注、划分与增强一体化流程设计
  • java单元测试代码
  • Python中的JSON库,详细介绍与代码示例
  • 《RESTful API版本控制的哲学思辨:稳定性与创新性的终极平衡》
  • Node.js 是什么?
  • 深入理解 TensorFlow 的模型保存与加载机制(SavedModel vs H5)
  • 蓝桥杯单片机国赛模板——基于柳离风模板
  • 列日-巴斯通-列日:与VELO Senso TT+见证精彩时刻
  • java类=null的回收
  • PostgreSQL 的 pg_ls_waldir 函数
  • Scala day6(Class,field,Single Object)
  • 【Flask】ORM模型以及数据库迁移的两种方法(flask-migrate、Alembic)
  • 学习路线(嵌入式软件)
  • 【C/C++】无锁编程——compare_exchange_strong
  • LeetCode 热题 100 46. 全排列
  • 为React组件库引入自动化测试:从零到完善的实践之路
  • 【CF】Day51——Codeforces Round 963 (Div. 2) CD
  • 【AI学习】DeepSeek-R1是如何训练的?
  • 我的世界Minecraft游戏服务器搭建教程:腾讯云Java版
  • 学习黑客Nmap 原理
  • 特朗普要征电影关税惊扰全球电影业,“让好莱坞再次伟大”或现反效果
  • 涉“子宫肌瘤”论文现55例男性对照观察患者?山大齐鲁医院:正在调查
  • 新剧|《执法者们》《亲爱的仇敌》5月7日开播
  • 执掌伯克希尔60年,股神巴菲特宣布年底交出最终决定权:阿贝尔将接任CEO
  • 抢抓消费旺季:五一假期,多地党政主官调研外贸优品展销活动
  • 菏泽家长“付费查成绩”风波调查:免费功能被误读