From ff7e4336344547f74c3158c00c40e11e5013ee27 Mon Sep 17 00:00:00 2001 From: DLmaster Date: Sun, 12 Jan 2025 11:59:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(gui):=20=E4=BF=AE=E5=A4=8D=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E6=98=BE=E7=A4=BA=E7=9A=84=E8=8B=A5=E5=B9=B2=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/system.py | 6 +- app/ui/main_window.py | 239 +++++++++++++++++---------------------- app/ui/member_manager.py | 44 ++----- app/ui/queue_manager.py | 55 ++------- app/ui/setting.py | 34 +----- main.py | 4 +- 6 files changed, 129 insertions(+), 253 deletions(-) diff --git a/app/services/system.py b/app/services/system.py index 839ab34..b531408 100644 --- a/app/services/system.py +++ b/app/services/system.py @@ -74,7 +74,7 @@ class SystemHandler: winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, ) winreg.SetValueEx( - key, "AUTO_MAA主程序", 0, winreg.REG_SZ, self.config.app_path_sys + key, "AUTO_MAA", 0, winreg.REG_SZ, self.config.app_path_sys ) winreg.CloseKey(key) elif ( @@ -89,7 +89,7 @@ class SystemHandler: winreg.KEY_SET_VALUE, winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, ) - winreg.DeleteValue(key, "AUTO_MAA主程序") + winreg.DeleteValue(key, "AUTO_MAA") winreg.CloseKey(key) def is_startup(self): @@ -103,7 +103,7 @@ class SystemHandler: ) try: - value, _ = winreg.QueryValueEx(key, "AUTO_MAA主程序") + value, _ = winreg.QueryValueEx(key, "AUTO_MAA") winreg.CloseKey(key) return True except FileNotFoundError: diff --git a/app/ui/main_window.py b/app/ui/main_window.py index 59e020a..9b84506 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -26,70 +26,30 @@ v4.2 """ from PySide6.QtWidgets import ( - QWidget, # - QMainWindow, # - QApplication, # - QSystemTrayIcon, # - QFileDialog, # - QTabWidget, # - QToolBox, # - QTableWidgetItem, # - QHeaderView, # - QVBoxLayout, + QApplication, + QSystemTrayIcon, ) from qfluentwidgets import ( Action, PushButton, - LineEdit, - PasswordLineEdit, - TextBrowser, - TableWidget, - TimePicker, SystemTrayMenu, - ComboBox, - CheckBox, - SpinBox, SplashScreen, FluentIcon, - RoundMenu, - MessageBox, - MessageBoxBase, InfoBar, InfoBarPosition, - BodyLabel, - Dialog, setTheme, Theme, - SystemThemeListener, - qconfig, MSFluentWindow, NavigationItemPosition, ) from PySide6.QtUiTools import QUiLoader from PySide6.QtGui import QIcon, QCloseEvent from PySide6 import QtCore -from functools import partial -from typing import List, Tuple -from pathlib import Path -import json -import datetime -import ctypes -import subprocess -import shutil -import win32gui -import win32process -import psutil -import pyautogui -import time -import winreg -import requests uiLoader = QUiLoader() -from app import AppConfig, MaaConfig +from app import AppConfig from app.services import Notification, CryptoHandler, SystemHandler -from app.utils import Updater, version_text -from .Widget import InputMessageBox, LineEditSettingCard, SpinBoxSettingCard from .setting import Setting from .member_manager import MemberManager from .queue_manager import QueueManager @@ -97,8 +57,6 @@ from .queue_manager import QueueManager class AUTO_MAA(MSFluentWindow): - if_save = True - def __init__( self, config: AppConfig, @@ -121,7 +79,7 @@ class AUTO_MAA(MSFluentWindow): setTheme(Theme.AUTO) self.splashScreen = SplashScreen(self.windowIcon(), self) - self.show() + self.show_ui("显示主窗口", if_quick=True) # 创建主窗口 self.setting = Setting(self.config, self.notify, self.crypto, self.system, self) @@ -163,7 +121,11 @@ class AUTO_MAA(MSFluentWindow): # 显示主界面菜单项 self.tray_menu.addAction( - Action(FluentIcon.CAFE, "显示主界面", triggered=self.show_main) + Action( + FluentIcon.CAFE, + "显示主界面", + triggered=lambda: self.show_ui("显示主窗口"), + ) ) self.tray_menu.addSeparator() @@ -193,12 +155,21 @@ class AUTO_MAA(MSFluentWindow): # 设置托盘菜单 self.tray.setContextMenu(self.tray_menu) self.tray.activated.connect(self.on_tray_activated) + self.setting.ui.card_IfShowTray.checkedChanged.connect( - lambda x: self.tray.show() if x else self.tray.hide() + lambda: self.show_ui("配置托盘") ) + self.setting.ui.card_IfToTray.checkedChanged.connect(self.set_min_method) self.splashScreen.finish() + def start_up_task(self) -> None: + """启动时任务""" + + # 检查密码 + self.setting.check_PASSWORD() + + # 检查更新 if self.config.global_config.get(self.config.global_config.update_IfAutoUpdate): result = self.setting.check_update() if result == "已是最新版本~": @@ -229,95 +200,70 @@ class AUTO_MAA(MSFluentWindow): info.addWidget(Up) info.show() - def show_tray(self): - """最小化到托盘""" - if self.if_save: - self.set_ui("保存") - self.hide() - self.tray.show() + def set_min_method(self) -> None: + """设置最小化方法""" + + if self.config.global_config.get(self.config.global_config.ui_IfToTray): + + self.titleBar.minBtn.clicked.disconnect() + self.titleBar.minBtn.clicked.connect(lambda: self.show_ui("隐藏到托盘")) - def show_main(self): - """显示主界面""" - self.set_ui("配置") - if self.config.global_config.get(self.config.global_config.ui_IfShowTray): - self.tray.show() else: - self.tray.hide() + + self.titleBar.minBtn.clicked.disconnect() + self.titleBar.minBtn.clicked.connect(self.showMinimized) def on_tray_activated(self, reason): """双击返回主界面""" if reason == QSystemTrayIcon.DoubleClick: - self.show_main() + self.show_ui("显示主窗口") - def start_task(self, mode): - """调起对应任务""" - if self.main.MaaManager.isRunning(): - self.notify.push_notification( - f"无法运行{mode}!", - "当前已有任务正在运行,请在该任务结束后重试", - "当前已有任务正在运行,请在该任务结束后重试", - 3, - ) - else: - self.main.maa_starter(mode) + # def start_task(self, mode): + # """调起对应任务""" + # if self.main.MaaManager.isRunning(): + # self.notify.push_notification( + # f"无法运行{mode}!", + # "当前已有任务正在运行,请在该任务结束后重试", + # "当前已有任务正在运行,请在该任务结束后重试", + # 3, + # ) + # else: + # self.main.maa_starter(mode) - def stop_task(self): - """中止当前任务""" - if self.main.MaaManager.isRunning(): - if ( - self.main.MaaManager.mode == "日常代理" - or self.main.MaaManager.mode == "人工排查" - ): - self.main.maa_ender(f"{self.main.MaaManager.mode}_结束") - elif "设置MAA" in self.main.MaaManager.mode: - self.notify.push_notification( - "正在设置MAA!", - "正在运行设置MAA任务,无法中止", - "正在运行设置MAA任务,无法中止", - 3, - ) - else: - self.notify.push_notification( - "无任务运行!", - "当前无任务正在运行,无需中止", - "当前无任务正在运行,无需中止", - 3, - ) + # def stop_task(self): + # """中止当前任务""" + # if self.main.MaaManager.isRunning(): + # if ( + # self.main.MaaManager.mode == "日常代理" + # or self.main.MaaManager.mode == "人工排查" + # ): + # self.main.maa_ender(f"{self.main.MaaManager.mode}_结束") + # elif "设置MAA" in self.main.MaaManager.mode: + # self.notify.push_notification( + # "正在设置MAA!", + # "正在运行设置MAA任务,无法中止", + # "正在运行设置MAA任务,无法中止", + # 3, + # ) + # else: + # self.notify.push_notification( + # "无任务运行!", + # "当前无任务正在运行,无需中止", + # "当前无任务正在运行,无需中止", + # 3, + # ) - def kill_main(self): + def kill_main(self) -> None: """退出主程序""" self.close() QApplication.quit() - def set_ui(self, mode): - """设置窗口相关属性""" + def show_ui(self, mode: str, if_quick: bool = False) -> None: + """配置窗口状态""" - # 保存窗口相关属性 - if mode == "保存": - - self.config.global_config.set( - self.config.global_config.ui_size, - f"{self.geometry().width()}x{self.geometry().height()}", - ) - self.config.global_config.set( - self.config.global_config.ui_location, - f"{self.geometry().x()}x{self.geometry().y()}", - ) - if self.isMaximized(): - self.config.global_config.set( - self.config.global_config.ui_maximized, True - ) - else: - self.config.global_config.set( - self.config.global_config.ui_maximized, False - ) - self.config.global_config.save() - - # 配置窗口相关属性 - elif mode == "配置": - - self.if_save = False + if mode == "显示主窗口": + # 配置主窗口 size = list( map( int, @@ -335,29 +281,50 @@ class AUTO_MAA(MSFluentWindow): ) ) self.setGeometry(location[0], location[1], size[0], size[1]) - if self.config.global_config.get(self.config.global_config.ui_maximized): - self.showMaximized() + self.show() + if not if_quick: + if self.config.global_config.get( + self.config.global_config.ui_maximized + ): + self.showMaximized() + self.set_min_method() + self.show_ui("配置托盘") + + elif mode == "配置托盘": + + if self.config.global_config.get(self.config.global_config.ui_IfShowTray): + self.tray.show() else: - self.showNormal() + self.tray.hide() - self.if_save = True + elif mode == "隐藏到托盘": - def changeEvent(self, event: QtCore.QEvent): - """重写后的 changeEvent""" + # 保存窗口相关属性 + if not self.isMaximized(): - # 最小化到托盘功能实现 - if event.type() == QtCore.QEvent.WindowStateChange: - if self.windowState() & QtCore.Qt.WindowMinimized: - if self.config.global_config.get(self.config.global_config.ui_IfToTray): - self.show_tray() + self.config.global_config.set( + self.config.global_config.ui_size, + f"{self.geometry().width()}x{self.geometry().height()}", + ) + self.config.global_config.set( + self.config.global_config.ui_location, + f"{self.geometry().x()}x{self.geometry().y()}", + ) + self.config.global_config.set( + self.config.global_config.ui_maximized, self.isMaximized() + ) + self.config.global_config.save() - # 保留其它 changeEvent 方法 - return super().changeEvent(event) + # 隐藏主窗口 + if not if_quick: + + self.hide() + self.tray.show() def closeEvent(self, event: QCloseEvent): """清理残余进程""" - self.set_ui("保存") + self.show_ui("隐藏到托盘", if_quick=True) # 清理各功能线程 # self.main.Timer.stop() diff --git a/app/ui/member_manager.py b/app/ui/member_manager.py index e9c3a58..1558b76 100644 --- a/app/ui/member_manager.py +++ b/app/ui/member_manager.py @@ -26,72 +26,41 @@ v4.2 """ from PySide6.QtWidgets import ( - QWidget, # - QMainWindow, # - QApplication, # - QSystemTrayIcon, # - QFileDialog, # - QTabWidget, # - QToolBox, # - QComboBox, # - QTableWidgetItem, # - QHeaderView, # + QWidget, + QFileDialog, + QTableWidgetItem, + QHeaderView, QVBoxLayout, QStackedWidget, - QHBoxLayout, ) from qfluentwidgets import ( Action, - PushButton, - LineEdit, - PasswordLineEdit, qconfig, TableWidget, Pivot, - TimePicker, ComboBox, - CheckBox, ScrollArea, - SpinBox, FluentIcon, - SwitchButton, - RoundMenu, MessageBox, - MessageBoxBase, HeaderCardWidget, - BodyLabel, CommandBar, setTheme, Theme, - SwitchSettingCard, ExpandGroupSettingCard, - SingleDirectionScrollArea, PushSettingCard, ) from PySide6.QtUiTools import QUiLoader -from PySide6.QtGui import QIcon, QCloseEvent from PySide6 import QtCore from functools import partial -from typing import List, Tuple -from pathlib import Path -import os +from typing import List import datetime import json -import subprocess import shutil -import win32gui -import win32process -import psutil -import pyautogui -import time -import winreg -import requests uiLoader = QUiLoader() from app import AppConfig, MaaConfig from app.services import Notification, CryptoHandler -from app.utils import Updater, version_text from .Widget import ( InputMessageBox, LineEditSettingCard, @@ -396,6 +365,9 @@ class MemberSettingBox(QWidget): member_list = self.search_member() + if len(member_list) == 0: + return None + if index > len(member_list): return None diff --git a/app/ui/queue_manager.py b/app/ui/queue_manager.py index d594aa4..0148c6b 100644 --- a/app/ui/queue_manager.py +++ b/app/ui/queue_manager.py @@ -26,75 +26,36 @@ v4.2 """ from PySide6.QtWidgets import ( - QWidget, # - QMainWindow, # - QApplication, # - QSystemTrayIcon, # - QFileDialog, # - QTabWidget, # - QToolBox, # - QComboBox, # - QTableWidgetItem, # - QHeaderView, # + QWidget, QVBoxLayout, QStackedWidget, QHBoxLayout, ) from qfluentwidgets import ( Action, - PushButton, - LineEdit, - PasswordLineEdit, qconfig, - TableWidget, Pivot, - TimePicker, - ComboBox, - CheckBox, ScrollArea, - SpinBox, FluentIcon, - SwitchButton, - RoundMenu, MessageBox, - MessageBoxBase, HeaderCardWidget, - BodyLabel, CommandBar, setTheme, Theme, SwitchSettingCard, - ExpandGroupSettingCard, - SingleDirectionScrollArea, ) from PySide6.QtUiTools import QUiLoader -from PySide6.QtGui import QIcon, QCloseEvent from PySide6 import QtCore -from functools import partial -from typing import List, Tuple -from pathlib import Path -import os -import datetime +from typing import List import json -import subprocess import shutil -import win32gui -import win32process -import psutil -import pyautogui -import time -import winreg -import requests uiLoader = QUiLoader() -from app import AppConfig, QueueConfig, MaaConfig -from app.services import Notification, CryptoHandler -from app.utils import Updater, version_text +from app import AppConfig, QueueConfig +from app.services import Notification from .Widget import ( - InputMessageBox, LineEditSettingCard, - SpinBoxSettingCard, TimeEditSettingCard, NoOptionComboBoxSettingCard, ) @@ -261,7 +222,10 @@ class QueueManager(QWidget): def refresh(self): """刷新调度队列界面""" - index = int(self.queue_manager.pivot.currentRouteKey()[5:]) + if len(self.queue_manager.search_queue()) == 0: + index = 0 + else: + index = int(self.queue_manager.pivot.currentRouteKey()[5:]) self.queue_manager.clear_SettingBox() self.queue_manager.show_SettingBox(index) @@ -312,6 +276,9 @@ class QueueSettingBox(QWidget): queue_list = self.search_queue() + if len(queue_list) == 0: + return None + if index > len(queue_list): return None diff --git a/app/ui/setting.py b/app/ui/setting.py index 6155c9d..f522b40 100644 --- a/app/ui/setting.py +++ b/app/ui/setting.py @@ -26,56 +26,26 @@ v4.2 """ from PySide6.QtWidgets import ( - QWidget, # - QMainWindow, # - QApplication, # - QSystemTrayIcon, # - QFileDialog, # - QTabWidget, # - QToolBox, # - QComboBox, # - QTableWidgetItem, # - QHeaderView, # + QWidget, + QApplication, QVBoxLayout, - QHBoxLayout, ) from qfluentwidgets import ( - Action, - PushButton, - LineEdit, - PasswordLineEdit, - TextBrowser, - TableWidget, - TimePicker, - ComboBox, - CheckBox, ScrollArea, - SpinBox, FluentIcon, setTheme, Theme, MessageBox, - MessageBoxBase, HeaderCardWidget, - BodyLabel, InfoBar, InfoBarPosition, - SubtitleLabel, - GroupHeaderCardWidget, SwitchSettingCard, ExpandGroupSettingCard, - SingleDirectionScrollArea, PushSettingCard, ) from PySide6.QtUiTools import QUiLoader -from PySide6.QtGui import QIcon, QCloseEvent from PySide6 import QtCore -from functools import partial -from typing import List, Tuple -from pathlib import Path import json -import datetime -import ctypes import subprocess import time import requests diff --git a/main.py b/main.py index c225ba8..6a44d3b 100644 --- a/main.py +++ b/main.py @@ -48,6 +48,6 @@ if __name__ == "__main__": application.installTranslator(translator) window = AUTO_MAA(config=config, notify=notify, crypto=crypto, system=system) - window.show_main() - window.setting.check_PASSWORD() + window.show_ui("显示主窗口") + window.start_up_task() sys.exit(application.exec())