mirror of
https://github.com/goldenfishs/MRobot.git
synced 2025-07-27 08:49:01 +08:00
82 lines
3.2 KiB
Python
82 lines
3.2 KiB
Python
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QStackedWidget, QSizePolicy
|
|
from PyQt5.QtCore import Qt
|
|
from qfluentwidgets import PushSettingCard, FluentIcon, TabBar
|
|
|
|
from .function_fit_interface import FunctionFitInterface
|
|
|
|
class MiniToolInterface(QWidget):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.setObjectName("minitoolInterface")
|
|
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) # 移除 Qt.AlignLeft
|
|
|
|
self.stackedWidget = QStackedWidget(self)
|
|
self.vBoxLayout.addWidget(self.stackedWidget) # 加入布局
|
|
|
|
|
|
# 初始主页面
|
|
self.mainPage = QWidget(self)
|
|
mainLayout = QVBoxLayout(self.mainPage)
|
|
mainLayout.setAlignment(Qt.AlignTop) # 卡片靠顶部
|
|
self.card = PushSettingCard(
|
|
text="▶启动",
|
|
icon=FluentIcon.UNIT,
|
|
title="曲线拟合工具",
|
|
content="简单的曲线拟合工具,支持多种函数类型",
|
|
)
|
|
mainLayout.addWidget(self.card)
|
|
self.mainPage.setLayout(mainLayout)
|
|
|
|
# 添加主页面到堆叠窗口
|
|
self.addSubInterface(self.mainPage, "mainPage", "工具箱主页")
|
|
|
|
self.setLayout(self.vBoxLayout)
|
|
|
|
# 信号连接
|
|
self.stackedWidget.currentChanged.connect(self.onCurrentIndexChanged)
|
|
# self.tabBar.tabAddRequested.connect(self.onAddNewTab)
|
|
self.tabBar.tabCloseRequested.connect(self.onCloseTab)
|
|
self.card.clicked.connect(self.open_fit_tab)
|
|
|
|
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") |