feat(ui): 关机等电源操作添加100s倒计时

This commit is contained in:
DLmaster
2025-03-14 23:06:51 +08:00
parent 364af4b9c5
commit d4d479ca20
5 changed files with 78 additions and 9 deletions

View File

@@ -27,7 +27,7 @@ v4.2
from loguru import logger
from PySide6.QtCore import QThread, QObject, Signal
from qfluentwidgets import Dialog
from qfluentwidgets import MessageBox
import json
from pathlib import Path
from datetime import datetime
@@ -187,9 +187,10 @@ class _TaskManager(QObject):
connect_gui = Signal(Task)
push_info_bar = Signal(str, str, str, int)
def __init__(self):
def __init__(self, main_window=None):
super(_TaskManager, self).__init__()
self.main_window = main_window
self.task_dict: Dict[str, Task] = {}
def add_task(
@@ -281,16 +282,33 @@ class _TaskManager(QObject):
"r", encoding="utf-8"
) as f:
info = json.load(f)
System.set_power(info["QueueSet"]["AfterAccomplish"])
if info["QueueSet"]["AfterAccomplish"] != "None":
from app.ui import ProgressRingMessageBox
mode_book = {
"Shutdown": "关机",
"Hibernate": "休眠",
"Sleep": "睡眠",
"KillSelf": "关闭AUTO_MAA",
}
choice = ProgressRingMessageBox(
self.main_window,
f"{mode_book[info['QueueSet']['AfterAccomplish']]}倒计时",
)
if choice.exec():
System.set_power(info["QueueSet"]["AfterAccomplish"])
def push_dialog(self, name: str, title: str, content: str):
"""推送对话框"""
choice = Dialog(title, content, None)
choice = MessageBox(title, content, self.main_window)
choice.yesButton.setText("")
choice.cancelButton.setText("")
self.task_dict[name].question_response.emit(bool(choice.exec_()))
self.task_dict[name].question_response.emit(bool(choice.exec()))
TaskManager = _TaskManager()

View File

@@ -26,7 +26,7 @@ v4.2
"""
from PySide6.QtWidgets import QWidget, QWidget, QLabel, QHBoxLayout, QSizePolicy
from PySide6.QtCore import Qt, QTime, QEvent, QSize
from PySide6.QtCore import Qt, QTime, QTimer, QEvent, QSize
from PySide6.QtGui import QIcon, QPixmap, QPainter, QPainterPath
from qfluentwidgets import (
LineEdit,
@@ -54,6 +54,7 @@ from qfluentwidgets import (
ExpandSettingCard,
ToolButton,
PushButton,
ProgressRing,
)
from qfluentwidgets.common.overload import singledispatchmethod
import os
@@ -108,6 +109,52 @@ class ComboBoxMessageBox(MessageBoxBase):
self.viewLayout.addWidget(Widget)
class ProgressRingMessageBox(MessageBoxBase):
"""进度环倒计时对话框"""
def __init__(self, parent, title: str):
super().__init__(parent)
self.title = SubtitleLabel(title)
self.time = 100
Widget = QWidget()
Layout = QHBoxLayout(Widget)
self.ring = ProgressRing()
self.ring.setRange(0, 100)
self.ring.setValue(100)
self.ring.setTextVisible(True)
self.ring.setFormat("%p 秒")
self.ring.setFixedSize(100, 100)
self.ring.setStrokeWidth(4)
Layout.addWidget(self.ring)
self.yesButton.hide()
self.cancelButton.clicked.connect(self.__quit_timer)
self.buttonLayout.insertStretch(1)
# 将组件添加到布局中
self.viewLayout.addWidget(self.title)
self.viewLayout.addWidget(Widget)
self.timer = QTimer(self)
self.timer.timeout.connect(self.__update_time)
self.timer.start(1000)
def __update_time(self):
self.time -= 1
self.ring.setValue(self.time)
if self.time == 0:
self.timer.stop()
self.timer.deleteLater()
self.yesButton.click()
def __quit_timer(self):
self.timer.stop()
self.timer.deleteLater()
class LineEditSettingCard(SettingCard):
"""Setting card with LineEdit"""

View File

@@ -30,5 +30,6 @@ __author__ = "DLmaster361 <DLmaster_361@163.com>"
__license__ = "GPL-3.0 license"
from .main_window import AUTO_MAA
from .Widget import ProgressRingMessageBox
__all__ = ["AUTO_MAA"]
__all__ = ["AUTO_MAA", "ProgressRingMessageBox"]

View File

@@ -72,6 +72,7 @@ class AUTO_MAA(MSFluentWindow):
self.splashScreen = SplashScreen(self.windowIcon(), self)
self.show_ui("显示主窗口", if_quick=True)
TaskManager.main_window = self.window()
MainInfoBar.main_window = self.window()
System.main_window = self.window()
@@ -260,7 +261,9 @@ class AUTO_MAA(MSFluentWindow):
)
if "网络错误" not in result:
Up = PushButton("更新")
Up.clicked.connect(lambda: self.setting.get_update(if_question=False))
Up.clicked.connect(
lambda: self.setting.get_update(if_question=False)
)
Up.clicked.connect(info.close)
info.addWidget(Up)
info.show()