Files
model_team_tools/core/tools/tools.py
T

127 lines
3.8 KiB
Python
Raw Normal View History

2026-06-12 16:01:53 +08:00
"""
工具箱模块
提供工具箱主窗口,包含各种实用工具的入口。
使用 PySide6 构建的窗口框架。
主要功能:
- 工具箱主窗口界面
- 窗口居中显示功能
- 工具分类和导航
Author: Model Team
Version: 0.0.1
"""
2026-07-14 14:24:54 +08:00
import os
import sys
2026-06-12 16:01:53 +08:00
import logging
2026-07-14 14:24:54 +08:00
import importlib.util
2026-06-12 16:01:53 +08:00
from qt_material import apply_stylesheet
from pathlib import Path
from .tools_ui import Ui_FormTools
from PySide6.QtGui import QIcon
2026-07-14 14:24:54 +08:00
from PySide6.QtWidgets import QWidget, QListWidgetItem
2026-06-12 16:01:53 +08:00
logger = logging.getLogger(__name__)
PLUGINS_PATH = Path('Y:/SE/xufeifei/plugins')
class ToolsWindow(QWidget, Ui_FormTools):
"""工具箱主窗口类
继承自 QWidgetQt 窗口基类)和 Ui_FormToolsQt Designer 生成的 UI 界面)
负责显示工具箱的主界面,提供工具的分类和导航功能。
窗口特性:
- 默认尺寸: 400x293 像素
- 支持窗口居中显示
- 可作为独立窗口或嵌入其他窗口使用
Attributes:
parent: 父窗口对象,默认为 None(顶级窗口)
"""
2026-07-14 14:24:54 +08:00
def __init__(self, tools:dict, parent: QWidget = None) -> None:
2026-06-12 16:01:53 +08:00
"""初始化工具箱窗口
创建工具箱窗口实例,初始化 UI 界面。
Args:
parent: 父窗口对象,用于建立父子关系。
默认为 None,表示这是顶级窗口。
"""
super().__init__(parent)
self.setupUi(self)
2026-07-14 14:24:54 +08:00
self.tools = tools
2026-06-12 16:01:53 +08:00
self.initUI()
2026-07-14 14:24:54 +08:00
self.init_tool_list()
2026-06-12 16:01:53 +08:00
self.load_stylesheet()
def initUI(self) -> None:
"""
初始化用户界面
配置窗口标题、图标、大小和居中显示。
"""
self.setWindowTitle("工具箱")
self.setWindowIcon(QIcon('resources/tools.ico'))
def load_stylesheet(self) -> None:
"""
加载 Qt 样式表和自定义样式文件
使用 qt_material 库加载暗色主题,并应用自定义 QSS 样式表
失败时记录错误日志,但不影响应用继续运行(降级策略)
异常处理:
- FileNotFoundError: 样式文件不存在
- RuntimeError: 主题加载失败
- 其他异常: 记录警告但不中断应用
"""
try:
apply_stylesheet(self, style=None,theme='dark_teal.xml', css_file='resources/my.qss')
except FileNotFoundError as e:
logger.warning(f"样式文件未找到,使用默认主题: {e}")
except RuntimeError as e:
logger.warning(f"主题加载失败,使用默认主题: {e}")
except Exception as e:
logger.warning(f"样式加载失败,使用默认主题: {e}")
2026-07-14 14:24:54 +08:00
def init_tool_list(self):
if not os.path.exists(PLUGINS_PATH):
logger.error("服务器链接错误!")
return
sys.path.append(str(PLUGINS_PATH))
for tool in Path(PLUGINS_PATH).glob("*.pyd"):
tool_name = tool.stem
try:
module = importlib.import_module(tool_name)
name = module.read_tool_name()
version = module.read_tool_version()
description = module.read_tool_description()
if name in self.tools.keys():
pass
else:
self.tools[name] = {}
self.tools[name]["version"] = version
self.tools[name]["description"] = description
except Exception as e:
logger.error(f"{tool_name}无法加载:{str(e)}")
# if
sys.path.remove(str(PLUGINS_PATH))
def on_update_tool_card(self):
# for ke
# item = QListWidgetItem()
pass