mirror of
https://github.com/goldenfishs/MRobot.git
synced 2025-09-14 12:54:33 +08:00
118 lines
4.7 KiB
Python
118 lines
4.7 KiB
Python
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QStackedWidget, QSizePolicy
|
||
from PyQt5.QtCore import Qt
|
||
from qfluentwidgets import PushSettingCard, FluentIcon, TabBar
|
||
from qfluentwidgets import TitleLabel, BodyLabel, PushButton, FluentIcon
|
||
|
||
from .function_fit_interface import FunctionFitInterface
|
||
from .ai_interface import AIInterface
|
||
|
||
class CodeConfigurationInterface(QWidget):
|
||
def __init__(self, parent=None):
|
||
super().__init__(parent)
|
||
self.setObjectName("CodeConfigurationInterface")
|
||
self.vBoxLayout = QVBoxLayout(self)
|
||
self.vBoxLayout.setAlignment(Qt.AlignTop)
|
||
self.vBoxLayout.setContentsMargins(10, 0, 10, 10) # 设置外边距
|
||
|
||
# 顶部标签栏,横向拉伸
|
||
self.tabBar = TabBar(self)
|
||
self.tabBar.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
|
||
self.vBoxLayout.addWidget(self.tabBar)
|
||
|
||
self.stackedWidget = QStackedWidget(self)
|
||
self.vBoxLayout.addWidget(self.stackedWidget)
|
||
|
||
# 初始主页面
|
||
self.mainPage = QWidget(self)
|
||
mainLayout = QVBoxLayout(self.mainPage)
|
||
mainLayout.setAlignment(Qt.AlignTop)
|
||
mainLayout.setSpacing(28)
|
||
mainLayout.setContentsMargins(48, 48, 48, 48)
|
||
|
||
title = TitleLabel("MRobot 代码生成")
|
||
title.setAlignment(Qt.AlignCenter)
|
||
mainLayout.addWidget(title)
|
||
|
||
subtitle = BodyLabel("请选择您的由CUBEMX生成的工程路径(.ico所在的目录),然后开启代码之旅!")
|
||
subtitle.setAlignment(Qt.AlignCenter)
|
||
mainLayout.addWidget(subtitle)
|
||
|
||
desc = BodyLabel("支持自动配置和生成任务,自主选择模块代码倒入,自动识别cubemx配置!")
|
||
desc.setAlignment(Qt.AlignCenter)
|
||
mainLayout.addWidget(desc)
|
||
|
||
mainLayout.addSpacing(18)
|
||
|
||
self.choose_btn = PushButton(FluentIcon.FOLDER, "选择项目路径")
|
||
self.choose_btn.setFixedWidth(200)
|
||
mainLayout.addWidget(self.choose_btn, alignment=Qt.AlignmentFlag.AlignCenter)
|
||
|
||
self.update_template_btn = PushButton(FluentIcon.SYNC, "更新代码库")
|
||
self.update_template_btn.setFixedWidth(200)
|
||
mainLayout.addWidget(self.update_template_btn, alignment=Qt.AlignmentFlag.AlignCenter)
|
||
|
||
mainLayout.addSpacing(10)
|
||
mainLayout.addStretch()
|
||
|
||
# 添加主页面到堆叠窗口
|
||
self.addSubInterface(self.mainPage, "mainPage", "代码生成主页")
|
||
|
||
self.setLayout(self.vBoxLayout)
|
||
|
||
# 信号连接
|
||
self.stackedWidget.currentChanged.connect(self.onCurrentIndexChanged)
|
||
self.tabBar.tabCloseRequested.connect(self.onCloseTab)
|
||
# 你可以在此处连接按钮的槽函数
|
||
# self.choose_btn.clicked.connect(self.choose_project_folder)
|
||
# self.update_template_btn.clicked.connect(self.update_user_template)
|
||
|
||
|
||
def addSubInterface(self, widget: QWidget, objectName: str, text: str):
|
||
widget.setObjectName(objectName)
|
||
self.stackedWidget.addWidget(widget)
|
||
self.tabBar.addTab(
|
||
routeKey=objectName,
|
||
text=text,
|
||
onClick=lambda: self.stackedWidget.setCurrentWidget(widget)
|
||
)
|
||
|
||
def onCurrentIndexChanged(self, index):
|
||
widget = self.stackedWidget.widget(index)
|
||
self.tabBar.setCurrentTab(widget.objectName())
|
||
|
||
def onAddNewTab(self):
|
||
pass # 可自定义添加新标签页逻辑
|
||
|
||
def onCloseTab(self, index: int):
|
||
item = self.tabBar.tabItem(index)
|
||
widget = self.findChild(QWidget, item.routeKey())
|
||
self.stackedWidget.removeWidget(widget)
|
||
self.tabBar.removeTab(index)
|
||
widget.deleteLater()
|
||
|
||
def open_fit_tab(self):
|
||
# 检查是否已存在标签页,避免重复添加
|
||
for i in range(self.stackedWidget.count()):
|
||
widget = self.stackedWidget.widget(i)
|
||
if widget.objectName() == "fitPage":
|
||
self.stackedWidget.setCurrentWidget(widget)
|
||
self.tabBar.setCurrentTab("fitPage")
|
||
return
|
||
fit_page = FunctionFitInterface(self)
|
||
self.addSubInterface(fit_page, "fitPage", "曲线拟合")
|
||
self.stackedWidget.setCurrentWidget(fit_page)
|
||
self.tabBar.setCurrentTab("fitPage")
|
||
|
||
def open_ai_tab(self):
|
||
# 检查是否已存在标签页,避免重复添加
|
||
for i in range(self.stackedWidget.count()):
|
||
widget = self.stackedWidget.widget(i)
|
||
if widget.objectName() == "aiPage":
|
||
self.stackedWidget.setCurrentWidget(widget)
|
||
self.tabBar.setCurrentTab("aiPage")
|
||
return
|
||
ai_page = AIInterface(self)
|
||
self.addSubInterface(ai_page, "aiPage", "AI问答")
|
||
self.stackedWidget.setCurrentWidget(ai_page)
|
||
self.tabBar.setCurrentTab("aiPage")
|