reorganize file structure

This commit is contained in:
Julian Freeman
2025-10-18 21:31:06 -04:00
parent 4933f233a1
commit 6b0f0130e3
7 changed files with 471 additions and 452 deletions

103
components/main_window.py Normal file
View File

@@ -0,0 +1,103 @@
from PySide6.QtWidgets import QApplication
from PySide6.QtCore import Qt, QThread, QModelIndex
from PySide6.QtGui import QIcon
from qfluentwidgets import MSFluentWindow, setTheme, Theme, InfoBar, FluentIcon as Fi
from common.utils import show_quick_tip, accept_warning
from common.api_worker import ApiWorker
from components.ext_dialog import ExtensionDialog
from components.main_interface import MainInterface
class MainWindow(MSFluentWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("插件安全标记")
self.setWindowIcon(QIcon(":/logo.png"))
# self.navigationInterface.hide()
self.resize(1000, 760)
desktop = QApplication.screens()[0].availableGeometry()
w, h = desktop.width(), desktop.height()
self.move(w // 2 - self.width() // 2, h // 2 - self.height() // 2)
setTheme(Theme.LIGHT)
# --- UI ---
self.main_interface = MainInterface(parent=self)
self.addSubInterface(self.main_interface, Fi.HOME, "主页", Fi.HOME_FILL)
# --- 初始化后台工作线程和 QObject ---
self.thread = QThread()
self.worker = ApiWorker()
self.worker.moveToThread(self.thread)
# 连接 Worker 的新信号
self.worker.queryAllFinished.connect(self.main_interface.ext_model.update_data)
self.worker.addOneFinished.connect(self.handle_operation_finished)
self.worker.updateOneFinished.connect(self.handle_operation_finished)
self.worker.deleteOneFinished.connect(self.handle_operation_finished)
self.worker.error.connect(self.handle_error)
self.thread.start()
# 连接信号和槽
self.main_interface.pbn_refresh.clicked.connect(self.worker.do_query_all)
self.main_interface.pbn_add.clicked.connect(self.on_add)
self.main_interface.pbn_delete.clicked.connect(self.on_delete)
self.main_interface.tbv_m.doubleClicked.connect(self.on_edit)
# 初始加载数据
self.worker.do_query_all()
def closeEvent(self, event):
"""关闭窗口时,确保线程也退出"""
self.thread.quit()
self.thread.wait()
super().closeEvent(event)
# --- GUI 槽函数 (在主线程中运行) ---
def handle_operation_finished(self, result: dict):
"""添加/更新/删除成功后的通用处理器"""
InfoBar.success("", "操作已成功完成。", duration=2000, parent=self.window())
self.worker.do_query_all() # 重新加载数据
def handle_error(self, error_message: str):
"""显示来自工作线程的错误消息"""
show_quick_tip(self, "API 错误", f"与服务器通信时发生错误:\n{error_message}")
# --- 按钮点击处理 ---
def on_add(self):
"""打开“添加”对话框 (add_one)"""
dialog = ExtensionDialog(parent=self)
if dialog.exec():
data = dialog.get_data()
self.worker.do_add_one(data)
def on_edit(self, index: QModelIndex):
"""打开“编辑”对话框(通过双击)(update_one)"""
item_data = index.data(Qt.ItemDataRole.UserRole)
item_id = item_data.get("ID")
dialog = ExtensionDialog(extension_data=item_data, parent=self)
if dialog.exec():
update_payload = dialog.get_update_payload()
self.worker.do_update_one(item_id, update_payload)
def on_delete(self):
"""删除当前选定的行 (delete_one)"""
# 前面设定了只能选中一行
ext_data: list[dict] = [index.data(Qt.ItemDataRole.UserRole)
for index in self.main_interface.tbv_m.selectedIndexes()
if index.column() == 0]
if len(ext_data) == 0:
show_quick_tip(self, "警告", "你没有选中任何插件。")
return
ext_d: dict = ext_data[0]
if accept_warning(self, True, "警告",
f"你确定要删除插件【{ext_d.get('NAME')}】吗?"):
return
self.worker.do_delete_one(ext_d.get("ID"))