当前位置: 首页 > 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_())

 运行结果

http://www.dtcms.com/a/173013.html

相关文章:

  • 基于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 原理
  • 时间同步服务核心知识笔记:原理、配置
  • 【信息系统项目管理师-论文真题】2006下半年论文详解(包括解题思路和写作要点)
  • C# 检查某个点是否存在于圆扇区内(Check whether a point exists in circle sector or not)
  • 五大神经网络开发实战:从入门到企业级部署
  • 【数据结构与算法】同余计算 哈希表与前缀和问题特征和模板化思路
  • 滚珠螺杆的精度如何保持?
  • Nacos源码—3.Nacos集群高可用分析二
  • Vue中的过滤器参数:灵活处理文本格式化
  • Docker 使用下 (二)
  • 知识图谱 + 大语言模型:打造更聪明、更可靠的AI大脑 —— 探索 GraphRAG 中文优化与可视化实践