mirror of
https://github.com/goldenfishs/MRobot.git
synced 2025-11-02 04:23:10 +08:00
创建了新的页面
This commit is contained in:
parent
fe82822d58
commit
af7529b529
@ -2,11 +2,13 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QStackedWidget, QSizePolicy
|
|||||||
from PyQt5.QtCore import Qt
|
from PyQt5.QtCore import Qt
|
||||||
from qfluentwidgets import PushSettingCard, FluentIcon, TabBar
|
from qfluentwidgets import PushSettingCard, FluentIcon, TabBar
|
||||||
from qfluentwidgets import TitleLabel, BodyLabel, PushButton, FluentIcon
|
from qfluentwidgets import TitleLabel, BodyLabel, PushButton, FluentIcon
|
||||||
|
from PyQt5.QtWidgets import QFileDialog
|
||||||
|
import os
|
||||||
from .function_fit_interface import FunctionFitInterface
|
from .function_fit_interface import FunctionFitInterface
|
||||||
from .ai_interface import AIInterface
|
from .ai_interface import AIInterface
|
||||||
from qfluentwidgets import InfoBar
|
from qfluentwidgets import InfoBar
|
||||||
from .tools.update_code import update_code
|
from .tools.update_code import update_code
|
||||||
|
from .code_generate_interface import CodeGenerateInterface
|
||||||
|
|
||||||
class CodeConfigurationInterface(QWidget):
|
class CodeConfigurationInterface(QWidget):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
@ -28,9 +30,10 @@ class CodeConfigurationInterface(QWidget):
|
|||||||
self.mainPage = QWidget(self)
|
self.mainPage = QWidget(self)
|
||||||
mainLayout = QVBoxLayout(self.mainPage)
|
mainLayout = QVBoxLayout(self.mainPage)
|
||||||
mainLayout.setAlignment(Qt.AlignTop)
|
mainLayout.setAlignment(Qt.AlignTop)
|
||||||
mainLayout.setSpacing(28)
|
mainLayout.setSpacing(28) # 设置间距
|
||||||
mainLayout.setContentsMargins(48, 48, 48, 48)
|
mainLayout.setContentsMargins(48, 48, 48, 48) # 设置内容边距
|
||||||
|
|
||||||
|
#添加空行
|
||||||
title = TitleLabel("MRobot 代码生成")
|
title = TitleLabel("MRobot 代码生成")
|
||||||
title.setAlignment(Qt.AlignCenter)
|
title.setAlignment(Qt.AlignCenter)
|
||||||
mainLayout.addWidget(title)
|
mainLayout.addWidget(title)
|
||||||
@ -64,10 +67,10 @@ class CodeConfigurationInterface(QWidget):
|
|||||||
# 信号连接
|
# 信号连接
|
||||||
self.stackedWidget.currentChanged.connect(self.onCurrentIndexChanged)
|
self.stackedWidget.currentChanged.connect(self.onCurrentIndexChanged)
|
||||||
self.tabBar.tabCloseRequested.connect(self.onCloseTab)
|
self.tabBar.tabCloseRequested.connect(self.onCloseTab)
|
||||||
# 你可以在此处连接按钮的槽函数
|
self.choose_btn.clicked.connect(self.choose_project_folder) # 启用选择项目路径按钮
|
||||||
# self.choose_btn.clicked.connect(self.choose_project_folder)
|
|
||||||
self.update_template_btn.clicked.connect(self.on_update_template)
|
self.update_template_btn.clicked.connect(self.on_update_template)
|
||||||
|
|
||||||
|
|
||||||
def on_update_template(self):
|
def on_update_template(self):
|
||||||
def info(parent):
|
def info(parent):
|
||||||
InfoBar.success(
|
InfoBar.success(
|
||||||
@ -85,6 +88,38 @@ class CodeConfigurationInterface(QWidget):
|
|||||||
)
|
)
|
||||||
update_code(parent=self, info_callback=info, error_callback=error)
|
update_code(parent=self, info_callback=info, error_callback=error)
|
||||||
|
|
||||||
|
def choose_project_folder(self):
|
||||||
|
folder = QFileDialog.getExistingDirectory(self, "选择CUBEMX工程目录")
|
||||||
|
if not folder:
|
||||||
|
return
|
||||||
|
ioc_files = [f for f in os.listdir(folder) if f.endswith('.ioc')]
|
||||||
|
if ioc_files:
|
||||||
|
# 检查是否已存在 codeGenPage 标签页
|
||||||
|
for i in range(self.stackedWidget.count()):
|
||||||
|
widget = self.stackedWidget.widget(i)
|
||||||
|
if widget is not None and widget.objectName() == "codeGenPage":
|
||||||
|
# 如果已存在,则切换到该标签页,并更新路径显示
|
||||||
|
if hasattr(widget, "project_path"):
|
||||||
|
widget.project_path = folder
|
||||||
|
if hasattr(widget, "refresh"):
|
||||||
|
widget.refresh()
|
||||||
|
self.stackedWidget.setCurrentWidget(widget)
|
||||||
|
self.tabBar.setCurrentTab("codeGenPage")
|
||||||
|
return
|
||||||
|
# 不存在则新建
|
||||||
|
code_gen_page = CodeGenerateInterface(folder, self)
|
||||||
|
self.addSubInterface(code_gen_page, "codeGenPage", "代码生成")
|
||||||
|
self.stackedWidget.setCurrentWidget(code_gen_page)
|
||||||
|
self.tabBar.setCurrentTab("codeGenPage")
|
||||||
|
else:
|
||||||
|
InfoBar.error(
|
||||||
|
title="未找到.ioc文件",
|
||||||
|
content="所选文件夹不是有效的CUBEMX工程目录,请重新选择。",
|
||||||
|
parent=self,
|
||||||
|
duration=3000
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def addSubInterface(self, widget: QWidget, objectName: str, text: str):
|
def addSubInterface(self, widget: QWidget, objectName: str, text: str):
|
||||||
widget.setObjectName(objectName)
|
widget.setObjectName(objectName)
|
||||||
self.stackedWidget.addWidget(widget)
|
self.stackedWidget.addWidget(widget)
|
||||||
@ -104,6 +139,9 @@ class CodeConfigurationInterface(QWidget):
|
|||||||
def onCloseTab(self, index: int):
|
def onCloseTab(self, index: int):
|
||||||
item = self.tabBar.tabItem(index)
|
item = self.tabBar.tabItem(index)
|
||||||
widget = self.findChild(QWidget, item.routeKey())
|
widget = self.findChild(QWidget, item.routeKey())
|
||||||
|
# 禁止关闭主页
|
||||||
|
if widget.objectName() == "mainPage":
|
||||||
|
return
|
||||||
self.stackedWidget.removeWidget(widget)
|
self.stackedWidget.removeWidget(widget)
|
||||||
self.tabBar.removeTab(index)
|
self.tabBar.removeTab(index)
|
||||||
widget.deleteLater()
|
widget.deleteLater()
|
||||||
|
|||||||
21
app/code_generate_interface.py
Normal file
21
app/code_generate_interface.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from PyQt5.QtWidgets import QWidget, QVBoxLayout
|
||||||
|
from PyQt5.QtCore import Qt
|
||||||
|
from qfluentwidgets import TitleLabel, BodyLabel
|
||||||
|
|
||||||
|
class CodeGenerateInterface(QWidget):
|
||||||
|
def __init__(self, project_path, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setObjectName("CodeGenerateInterface")
|
||||||
|
self.project_path = project_path
|
||||||
|
|
||||||
|
layout = QVBoxLayout(self)
|
||||||
|
layout.setAlignment(Qt.AlignTop)
|
||||||
|
layout.setContentsMargins(10, 10, 10, 10)
|
||||||
|
|
||||||
|
title = TitleLabel("代码生成页面")
|
||||||
|
title.setAlignment(Qt.AlignCenter)
|
||||||
|
layout.addWidget(title)
|
||||||
|
|
||||||
|
desc = BodyLabel(f"当前工程路径: {self.project_path}")
|
||||||
|
desc.setAlignment(Qt.AlignCenter)
|
||||||
|
layout.addWidget(desc)
|
||||||
@ -65,17 +65,6 @@ class MainWindow(FluentWindow):
|
|||||||
self.addSubInterface(AboutInterface(self), FIF.INFO, self.tr('关于'), position=NavigationItemPosition.BOTTOM)
|
self.addSubInterface(AboutInterface(self), FIF.INFO, self.tr('关于'), position=NavigationItemPosition.BOTTOM)
|
||||||
|
|
||||||
|
|
||||||
# self.navigationInterface.addWidget(
|
|
||||||
# 'startGameButton',
|
|
||||||
# NavigationBarPushButton(FIF.PLAY, '启动游戏', isSelectable=False),
|
|
||||||
# self.startGame,
|
|
||||||
# NavigationItemPosition.BOTTOM)
|
|
||||||
|
|
||||||
# self.navigationInterface.addWidget(
|
|
||||||
# 'themeButton',
|
|
||||||
# NavigationBarPushButton(FIF.BRUSH, '主题', isSelectable=False),
|
|
||||||
# lambda: toggleTheme(lazy=True),
|
|
||||||
# NavigationItemPosition.BOTTOM)
|
|
||||||
|
|
||||||
self.themeBtn = NavigationPushButton(FIF.BRUSH, "切换主题", False, self.navigationInterface)
|
self.themeBtn = NavigationPushButton(FIF.BRUSH, "切换主题", False, self.navigationInterface)
|
||||||
self.themeBtn.clicked.connect(lambda: toggleTheme(lazy=True))
|
self.themeBtn.clicked.connect(lambda: toggleTheme(lazy=True))
|
||||||
@ -86,27 +75,6 @@ class MainWindow(FluentWindow):
|
|||||||
NavigationItemPosition.BOTTOM
|
NavigationItemPosition.BOTTOM
|
||||||
)
|
)
|
||||||
|
|
||||||
# self.navigationInterface.addWidget(
|
|
||||||
# 'avatar',
|
|
||||||
# NavigationBarPushButton(FIF.HEART, '赞赏', isSelectable=False),
|
|
||||||
# lambda: MessageBoxSupport(
|
|
||||||
# '支持作者🥰',
|
|
||||||
# '此程序为免费开源项目,如果你付了钱请立刻退款\n如果喜欢本项目,可以微信赞赏送作者一杯咖啡☕\n您的支持就是作者开发和维护项目的动力🚀',
|
|
||||||
# './assets/app/images/sponsor.jpg',
|
|
||||||
# self
|
|
||||||
# ).exec(),
|
|
||||||
# NavigationItemPosition.BOTTOM
|
|
||||||
# )
|
|
||||||
|
|
||||||
# self.addSubInterface(self.settingInterface, FIF.SETTING, self.tr('设置'), position=NavigationItemPosition.BOTTOM)
|
|
||||||
|
|
||||||
# self.splashScreen.finish() # 结束启动画面
|
|
||||||
# self.themeListener = checkThemeChange(self)
|
|
||||||
|
|
||||||
# if not cfg.get_value(base64.b64decode("YXV0b191cGRhdGU=").decode("utf-8")):
|
|
||||||
# disclaimer(self)
|
|
||||||
|
|
||||||
|
|
||||||
# main_window.py 只需修改关闭事件
|
# main_window.py 只需修改关闭事件
|
||||||
def closeEvent(self, e):
|
def closeEvent(self, e):
|
||||||
# if self.themeListener and self.themeListener.isRunning():
|
# if self.themeListener and self.themeListener.isRunning():
|
||||||
|
|||||||
@ -73,6 +73,9 @@ class MiniToolInterface(QWidget):
|
|||||||
def onCloseTab(self, index: int):
|
def onCloseTab(self, index: int):
|
||||||
item = self.tabBar.tabItem(index)
|
item = self.tabBar.tabItem(index)
|
||||||
widget = self.findChild(QWidget, item.routeKey())
|
widget = self.findChild(QWidget, item.routeKey())
|
||||||
|
# 禁止关闭主页
|
||||||
|
if widget.objectName() == "mainPage":
|
||||||
|
return
|
||||||
self.stackedWidget.removeWidget(widget)
|
self.stackedWidget.removeWidget(widget)
|
||||||
self.tabBar.removeTab(index)
|
self.tabBar.removeTab(index)
|
||||||
widget.deleteLater()
|
widget.deleteLater()
|
||||||
|
|||||||
7
app/tools/analyzing_ioc.py
Normal file
7
app/tools/analyzing_ioc.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
class analyzing_ioc:
|
||||||
|
def __init__(self, ioc_data): # 初始化方法,接收IOC数据
|
||||||
|
self.ioc_data = ioc_data # 存储IOC数据
|
||||||
|
|
||||||
|
|
||||||
0
app/tools/code_generate.py
Normal file
0
app/tools/code_generate.py
Normal file
Loading…
Reference in New Issue
Block a user