"""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("⑤ 设置"))