已经实现以下功能 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):
# 保持原有导出逻辑不变
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MCUConfigurator()
ex.setWindowTitle("MCU配置工具")
ex.resize(600, 400)
ex.show()
sys.exit(app.exec_())
运行结果