fix(gui): 修复界面显示的若干方法

This commit is contained in:
DLmaster
2025-01-12 11:59:22 +08:00
parent 1ea9d10bb4
commit ff7e433634
6 changed files with 129 additions and 253 deletions

View File

@@ -74,7 +74,7 @@ class SystemHandler:
winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY,
) )
winreg.SetValueEx( 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) winreg.CloseKey(key)
elif ( elif (
@@ -89,7 +89,7 @@ class SystemHandler:
winreg.KEY_SET_VALUE, winreg.KEY_SET_VALUE,
winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, 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) winreg.CloseKey(key)
def is_startup(self): def is_startup(self):
@@ -103,7 +103,7 @@ class SystemHandler:
) )
try: try:
value, _ = winreg.QueryValueEx(key, "AUTO_MAA主程序") value, _ = winreg.QueryValueEx(key, "AUTO_MAA")
winreg.CloseKey(key) winreg.CloseKey(key)
return True return True
except FileNotFoundError: except FileNotFoundError:

View File

@@ -26,70 +26,30 @@ v4.2
""" """
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QWidget, # QApplication,
QMainWindow, # QSystemTrayIcon,
QApplication, #
QSystemTrayIcon, #
QFileDialog, #
QTabWidget, #
QToolBox, #
QTableWidgetItem, #
QHeaderView, #
QVBoxLayout,
) )
from qfluentwidgets import ( from qfluentwidgets import (
Action, Action,
PushButton, PushButton,
LineEdit,
PasswordLineEdit,
TextBrowser,
TableWidget,
TimePicker,
SystemTrayMenu, SystemTrayMenu,
ComboBox,
CheckBox,
SpinBox,
SplashScreen, SplashScreen,
FluentIcon, FluentIcon,
RoundMenu,
MessageBox,
MessageBoxBase,
InfoBar, InfoBar,
InfoBarPosition, InfoBarPosition,
BodyLabel,
Dialog,
setTheme, setTheme,
Theme, Theme,
SystemThemeListener,
qconfig,
MSFluentWindow, MSFluentWindow,
NavigationItemPosition, NavigationItemPosition,
) )
from PySide6.QtUiTools import QUiLoader from PySide6.QtUiTools import QUiLoader
from PySide6.QtGui import QIcon, QCloseEvent from PySide6.QtGui import QIcon, QCloseEvent
from PySide6 import QtCore 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() uiLoader = QUiLoader()
from app import AppConfig, MaaConfig from app import AppConfig
from app.services import Notification, CryptoHandler, SystemHandler 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 .setting import Setting
from .member_manager import MemberManager from .member_manager import MemberManager
from .queue_manager import QueueManager from .queue_manager import QueueManager
@@ -97,8 +57,6 @@ from .queue_manager import QueueManager
class AUTO_MAA(MSFluentWindow): class AUTO_MAA(MSFluentWindow):
if_save = True
def __init__( def __init__(
self, self,
config: AppConfig, config: AppConfig,
@@ -121,7 +79,7 @@ class AUTO_MAA(MSFluentWindow):
setTheme(Theme.AUTO) setTheme(Theme.AUTO)
self.splashScreen = SplashScreen(self.windowIcon(), self) 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) self.setting = Setting(self.config, self.notify, self.crypto, self.system, self)
@@ -163,7 +121,11 @@ class AUTO_MAA(MSFluentWindow):
# 显示主界面菜单项 # 显示主界面菜单项
self.tray_menu.addAction( self.tray_menu.addAction(
Action(FluentIcon.CAFE, "显示主界面", triggered=self.show_main) Action(
FluentIcon.CAFE,
"显示主界面",
triggered=lambda: self.show_ui("显示主窗口"),
)
) )
self.tray_menu.addSeparator() self.tray_menu.addSeparator()
@@ -193,12 +155,21 @@ class AUTO_MAA(MSFluentWindow):
# 设置托盘菜单 # 设置托盘菜单
self.tray.setContextMenu(self.tray_menu) self.tray.setContextMenu(self.tray_menu)
self.tray.activated.connect(self.on_tray_activated) self.tray.activated.connect(self.on_tray_activated)
self.setting.ui.card_IfShowTray.checkedChanged.connect( 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() 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): if self.config.global_config.get(self.config.global_config.update_IfAutoUpdate):
result = self.setting.check_update() result = self.setting.check_update()
if result == "已是最新版本~": if result == "已是最新版本~":
@@ -229,95 +200,70 @@ class AUTO_MAA(MSFluentWindow):
info.addWidget(Up) info.addWidget(Up)
info.show() info.show()
def show_tray(self): def set_min_method(self) -> None:
"""最小化到托盘""" """设置最小化方法"""
if self.if_save:
self.set_ui("保存") if self.config.global_config.get(self.config.global_config.ui_IfToTray):
self.hide()
self.tray.show() 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: else:
self.tray.hide()
self.titleBar.minBtn.clicked.disconnect()
self.titleBar.minBtn.clicked.connect(self.showMinimized)
def on_tray_activated(self, reason): def on_tray_activated(self, reason):
"""双击返回主界面""" """双击返回主界面"""
if reason == QSystemTrayIcon.DoubleClick: if reason == QSystemTrayIcon.DoubleClick:
self.show_main() self.show_ui("显示主窗口")
def start_task(self, mode): # def start_task(self, mode):
"""调起对应任务""" # """调起对应任务"""
if self.main.MaaManager.isRunning(): # if self.main.MaaManager.isRunning():
self.notify.push_notification( # self.notify.push_notification(
f"无法运行{mode}", # f"无法运行{mode}",
"当前已有任务正在运行,请在该任务结束后重试", # "当前已有任务正在运行,请在该任务结束后重试",
"当前已有任务正在运行,请在该任务结束后重试", # "当前已有任务正在运行,请在该任务结束后重试",
3, # 3,
) # )
else: # else:
self.main.maa_starter(mode) # self.main.maa_starter(mode)
def stop_task(self): # def stop_task(self):
"""中止当前任务""" # """中止当前任务"""
if self.main.MaaManager.isRunning(): # if self.main.MaaManager.isRunning():
if ( # if (
self.main.MaaManager.mode == "日常代理" # self.main.MaaManager.mode == "日常代理"
or self.main.MaaManager.mode == "人工排查" # or self.main.MaaManager.mode == "人工排查"
): # ):
self.main.maa_ender(f"{self.main.MaaManager.mode}_结束") # self.main.maa_ender(f"{self.main.MaaManager.mode}_结束")
elif "设置MAA" in self.main.MaaManager.mode: # elif "设置MAA" in self.main.MaaManager.mode:
self.notify.push_notification( # self.notify.push_notification(
"正在设置MAA", # "正在设置MAA",
"正在运行设置MAA任务无法中止", # "正在运行设置MAA任务无法中止",
"正在运行设置MAA任务无法中止", # "正在运行设置MAA任务无法中止",
3, # 3,
) # )
else: # else:
self.notify.push_notification( # self.notify.push_notification(
"无任务运行!", # "无任务运行!",
"当前无任务正在运行,无需中止", # "当前无任务正在运行,无需中止",
"当前无任务正在运行,无需中止", # "当前无任务正在运行,无需中止",
3, # 3,
) # )
def kill_main(self): def kill_main(self) -> None:
"""退出主程序""" """退出主程序"""
self.close() self.close()
QApplication.quit() QApplication.quit()
def set_ui(self, mode): def show_ui(self, mode: str, if_quick: bool = False) -> None:
"""置窗口相关属性""" """置窗口状态"""
# 保存窗口相关属性 if mode == "显示主窗口":
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
# 配置主窗口
size = list( size = list(
map( map(
int, int,
@@ -335,29 +281,50 @@ class AUTO_MAA(MSFluentWindow):
) )
) )
self.setGeometry(location[0], location[1], size[0], size[1]) self.setGeometry(location[0], location[1], size[0], size[1])
if self.config.global_config.get(self.config.global_config.ui_maximized): self.show()
self.showMaximized() 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: else:
self.showNormal() self.tray.hide()
self.if_save = True elif mode == "隐藏到托盘":
def changeEvent(self, event: QtCore.QEvent): # 保存窗口相关属性
"""重写后的 changeEvent""" if not self.isMaximized():
# 最小化到托盘功能实现 self.config.global_config.set(
if event.type() == QtCore.QEvent.WindowStateChange: self.config.global_config.ui_size,
if self.windowState() & QtCore.Qt.WindowMinimized: f"{self.geometry().width()}x{self.geometry().height()}",
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_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): def closeEvent(self, event: QCloseEvent):
"""清理残余进程""" """清理残余进程"""
self.set_ui("保存") self.show_ui("隐藏到托盘", if_quick=True)
# 清理各功能线程 # 清理各功能线程
# self.main.Timer.stop() # self.main.Timer.stop()

View File

@@ -26,72 +26,41 @@ v4.2
""" """
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QWidget, # QWidget,
QMainWindow, # QFileDialog,
QApplication, # QTableWidgetItem,
QSystemTrayIcon, # QHeaderView,
QFileDialog, #
QTabWidget, #
QToolBox, #
QComboBox, #
QTableWidgetItem, #
QHeaderView, #
QVBoxLayout, QVBoxLayout,
QStackedWidget, QStackedWidget,
QHBoxLayout,
) )
from qfluentwidgets import ( from qfluentwidgets import (
Action, Action,
PushButton,
LineEdit,
PasswordLineEdit,
qconfig, qconfig,
TableWidget, TableWidget,
Pivot, Pivot,
TimePicker,
ComboBox, ComboBox,
CheckBox,
ScrollArea, ScrollArea,
SpinBox,
FluentIcon, FluentIcon,
SwitchButton,
RoundMenu,
MessageBox, MessageBox,
MessageBoxBase,
HeaderCardWidget, HeaderCardWidget,
BodyLabel,
CommandBar, CommandBar,
setTheme, setTheme,
Theme, Theme,
SwitchSettingCard,
ExpandGroupSettingCard, ExpandGroupSettingCard,
SingleDirectionScrollArea,
PushSettingCard, PushSettingCard,
) )
from PySide6.QtUiTools import QUiLoader from PySide6.QtUiTools import QUiLoader
from PySide6.QtGui import QIcon, QCloseEvent
from PySide6 import QtCore from PySide6 import QtCore
from functools import partial from functools import partial
from typing import List, Tuple from typing import List
from pathlib import Path
import os
import datetime import datetime
import json import json
import subprocess
import shutil import shutil
import win32gui
import win32process
import psutil
import pyautogui
import time
import winreg
import requests
uiLoader = QUiLoader() uiLoader = QUiLoader()
from app import AppConfig, MaaConfig from app import AppConfig, MaaConfig
from app.services import Notification, CryptoHandler from app.services import Notification, CryptoHandler
from app.utils import Updater, version_text
from .Widget import ( from .Widget import (
InputMessageBox, InputMessageBox,
LineEditSettingCard, LineEditSettingCard,
@@ -396,6 +365,9 @@ class MemberSettingBox(QWidget):
member_list = self.search_member() member_list = self.search_member()
if len(member_list) == 0:
return None
if index > len(member_list): if index > len(member_list):
return None return None

View File

@@ -26,75 +26,36 @@ v4.2
""" """
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QWidget, # QWidget,
QMainWindow, #
QApplication, #
QSystemTrayIcon, #
QFileDialog, #
QTabWidget, #
QToolBox, #
QComboBox, #
QTableWidgetItem, #
QHeaderView, #
QVBoxLayout, QVBoxLayout,
QStackedWidget, QStackedWidget,
QHBoxLayout, QHBoxLayout,
) )
from qfluentwidgets import ( from qfluentwidgets import (
Action, Action,
PushButton,
LineEdit,
PasswordLineEdit,
qconfig, qconfig,
TableWidget,
Pivot, Pivot,
TimePicker,
ComboBox,
CheckBox,
ScrollArea, ScrollArea,
SpinBox,
FluentIcon, FluentIcon,
SwitchButton,
RoundMenu,
MessageBox, MessageBox,
MessageBoxBase,
HeaderCardWidget, HeaderCardWidget,
BodyLabel,
CommandBar, CommandBar,
setTheme, setTheme,
Theme, Theme,
SwitchSettingCard, SwitchSettingCard,
ExpandGroupSettingCard,
SingleDirectionScrollArea,
) )
from PySide6.QtUiTools import QUiLoader from PySide6.QtUiTools import QUiLoader
from PySide6.QtGui import QIcon, QCloseEvent
from PySide6 import QtCore from PySide6 import QtCore
from functools import partial from typing import List
from typing import List, Tuple
from pathlib import Path
import os
import datetime
import json import json
import subprocess
import shutil import shutil
import win32gui
import win32process
import psutil
import pyautogui
import time
import winreg
import requests
uiLoader = QUiLoader() uiLoader = QUiLoader()
from app import AppConfig, QueueConfig, MaaConfig from app import AppConfig, QueueConfig
from app.services import Notification, CryptoHandler from app.services import Notification
from app.utils import Updater, version_text
from .Widget import ( from .Widget import (
InputMessageBox,
LineEditSettingCard, LineEditSettingCard,
SpinBoxSettingCard,
TimeEditSettingCard, TimeEditSettingCard,
NoOptionComboBoxSettingCard, NoOptionComboBoxSettingCard,
) )
@@ -261,7 +222,10 @@ class QueueManager(QWidget):
def refresh(self): 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.clear_SettingBox()
self.queue_manager.show_SettingBox(index) self.queue_manager.show_SettingBox(index)
@@ -312,6 +276,9 @@ class QueueSettingBox(QWidget):
queue_list = self.search_queue() queue_list = self.search_queue()
if len(queue_list) == 0:
return None
if index > len(queue_list): if index > len(queue_list):
return None return None

View File

@@ -26,56 +26,26 @@ v4.2
""" """
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QWidget, # QWidget,
QMainWindow, # QApplication,
QApplication, #
QSystemTrayIcon, #
QFileDialog, #
QTabWidget, #
QToolBox, #
QComboBox, #
QTableWidgetItem, #
QHeaderView, #
QVBoxLayout, QVBoxLayout,
QHBoxLayout,
) )
from qfluentwidgets import ( from qfluentwidgets import (
Action,
PushButton,
LineEdit,
PasswordLineEdit,
TextBrowser,
TableWidget,
TimePicker,
ComboBox,
CheckBox,
ScrollArea, ScrollArea,
SpinBox,
FluentIcon, FluentIcon,
setTheme, setTheme,
Theme, Theme,
MessageBox, MessageBox,
MessageBoxBase,
HeaderCardWidget, HeaderCardWidget,
BodyLabel,
InfoBar, InfoBar,
InfoBarPosition, InfoBarPosition,
SubtitleLabel,
GroupHeaderCardWidget,
SwitchSettingCard, SwitchSettingCard,
ExpandGroupSettingCard, ExpandGroupSettingCard,
SingleDirectionScrollArea,
PushSettingCard, PushSettingCard,
) )
from PySide6.QtUiTools import QUiLoader from PySide6.QtUiTools import QUiLoader
from PySide6.QtGui import QIcon, QCloseEvent
from PySide6 import QtCore from PySide6 import QtCore
from functools import partial
from typing import List, Tuple
from pathlib import Path
import json import json
import datetime
import ctypes
import subprocess import subprocess
import time import time
import requests import requests

View File

@@ -48,6 +48,6 @@ if __name__ == "__main__":
application.installTranslator(translator) application.installTranslator(translator)
window = AUTO_MAA(config=config, notify=notify, crypto=crypto, system=system) window = AUTO_MAA(config=config, notify=notify, crypto=crypto, system=system)
window.show_main() window.show_ui("显示主窗口")
window.setting.check_PASSWORD() window.start_up_task()
sys.exit(application.exec()) sys.exit(application.exec())