92 lines
3.5 KiB
Python
92 lines
3.5 KiB
Python
"""Main GUI window."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .tabs.accounts import AccountsTab
|
|
from .tabs.apply import ApplyTab
|
|
from .tabs.collect import CollectTab
|
|
from .tabs.generate import GenerateTab
|
|
from .tabs.settings import SettingsTab
|
|
from .widgets import *
|
|
class MainWindow(QMainWindow):
|
|
"""Main application window with the fixed five-tab workflow."""
|
|
|
|
def __init__(self, db_path=None, config=None, config_path=None, ai_models_path=None):
|
|
super().__init__()
|
|
self.config = appconfig.load_config(config_path or appconfig.CONFIG_PATH) if config is None else config
|
|
self.config_path = (
|
|
config_path
|
|
or self.config.get("config_path")
|
|
or appconfig.CONFIG_PATH
|
|
)
|
|
self.db_path = _database_path(db_path, self.config)
|
|
self.ai_models_path = (
|
|
ai_models_path
|
|
or self.config.get("ai_models_path")
|
|
or appconfig.AI_MODELS_PATH
|
|
)
|
|
self.setWindowTitle("cmshopee")
|
|
self.resize(1180, 760)
|
|
self.tabs = QTabWidget()
|
|
self.tabs.setObjectName("mainTabs")
|
|
self.tabs.setStyleSheet(TAB_STYLE)
|
|
self.tabs.currentChanged.connect(self._on_tab_changed)
|
|
for title in TAB_TITLES:
|
|
self.tabs.addTab(self._build_tab(title), title)
|
|
self.tabs.setTabIcon(TAB_TITLES.index("③ 更新shopee"), _warning_dot_icon())
|
|
self.setCentralWidget(self.tabs)
|
|
self.statusBar().showMessage("就绪")
|
|
|
|
def _build_tab(self, title):
|
|
if title == "① 导入采集":
|
|
return CollectTab(
|
|
db_path=self.db_path,
|
|
config=self.config,
|
|
status_callback=self.statusBar().showMessage,
|
|
open_accounts_callback=lambda: self.open_accounts_tab(),
|
|
refresh_workflow_callback=lambda: self.refresh_task_tabs(),
|
|
)
|
|
if title == "② AI生成":
|
|
return GenerateTab(
|
|
db_path=self.db_path,
|
|
config=self.config,
|
|
config_path=self.config_path,
|
|
status_callback=self.statusBar().showMessage,
|
|
open_accounts_callback=lambda: self.open_accounts_tab(),
|
|
)
|
|
if title == "③ 更新shopee":
|
|
return ApplyTab(
|
|
db_path=self.db_path,
|
|
config=self.config,
|
|
status_callback=self.statusBar().showMessage,
|
|
open_accounts_callback=lambda: self.open_accounts_tab(),
|
|
open_settings_callback=lambda: self.open_settings_tab(),
|
|
)
|
|
if title == "④ 账号管理":
|
|
return AccountsTab(
|
|
db_path=self.db_path,
|
|
config=self.config,
|
|
status_callback=self.statusBar().showMessage,
|
|
)
|
|
return SettingsTab(
|
|
config=self.config,
|
|
config_path=self.config_path,
|
|
ai_models_path=self.ai_models_path,
|
|
status_callback=self.statusBar().showMessage,
|
|
)
|
|
|
|
def refresh_task_tabs(self):
|
|
for index in range(self.tabs.count()):
|
|
widget = self.tabs.widget(index)
|
|
if hasattr(widget, "refresh_tasks"):
|
|
widget.refresh_tasks()
|
|
|
|
def _on_tab_changed(self, index):
|
|
self.statusBar().showMessage(f"当前:{self.tabs.tabText(index)}")
|
|
|
|
def open_accounts_tab(self):
|
|
self.tabs.setCurrentIndex(TAB_TITLES.index("④ 账号管理"))
|
|
|
|
def open_settings_tab(self):
|
|
self.tabs.setCurrentIndex(TAB_TITLES.index("⑤ 设置"))
|