mirror of
https://github.com/hyb-oyqq/FRAISEMOE-Addons-Installer-NEXT.git
synced 2025-12-17 12:30:27 +00:00
147 lines
4.6 KiB
Python
147 lines
4.6 KiB
Python
|
|
"""
|
|||
|
|
对话框工厂
|
|||
|
|
负责创建和管理各种类型的对话框
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
from PySide6.QtWidgets import QMessageBox, QDialog, QVBoxLayout, QProgressBar, QLabel, QApplication
|
|||
|
|
from PySide6.QtCore import Qt
|
|||
|
|
|
|||
|
|
from utils import msgbox_frame
|
|||
|
|
from config.config import APP_NAME
|
|||
|
|
from workers.download import ProgressWindow
|
|||
|
|
|
|||
|
|
|
|||
|
|
class DialogFactory:
|
|||
|
|
"""对话框工厂类"""
|
|||
|
|
|
|||
|
|
def __init__(self, main_window):
|
|||
|
|
"""初始化对话框工厂
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
main_window: 主窗口实例
|
|||
|
|
"""
|
|||
|
|
self.main_window = main_window
|
|||
|
|
self.loading_dialog = None
|
|||
|
|
|
|||
|
|
def create_message_box(self, title, message, buttons=QMessageBox.StandardButton.Ok):
|
|||
|
|
"""创建统一风格的消息框
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
title: 消息框标题
|
|||
|
|
message: 消息内容
|
|||
|
|
buttons: 按钮类型,默认为确定按钮
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
QMessageBox: 配置好的消息框实例
|
|||
|
|
"""
|
|||
|
|
msg_box = msgbox_frame(
|
|||
|
|
f"{title} - {APP_NAME}",
|
|||
|
|
message,
|
|||
|
|
buttons,
|
|||
|
|
)
|
|||
|
|
return msg_box
|
|||
|
|
|
|||
|
|
def create_progress_window(self, title, initial_text="准备中..."):
|
|||
|
|
"""创建并返回一个通用的进度窗口
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
title (str): 窗口标题
|
|||
|
|
initial_text (str): 初始状态文本
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
QDialog: 配置好的进度窗口实例
|
|||
|
|
"""
|
|||
|
|
# 如果是下载进度窗口,使用专用的ProgressWindow类
|
|||
|
|
if "下载" in title:
|
|||
|
|
return ProgressWindow(self.main_window)
|
|||
|
|
|
|||
|
|
# 其他情况使用基本的进度窗口
|
|||
|
|
progress_window = QDialog(self.main_window)
|
|||
|
|
progress_window.setWindowTitle(f"{title} - {APP_NAME}")
|
|||
|
|
progress_window.setFixedSize(400, 150)
|
|||
|
|
|
|||
|
|
layout = QVBoxLayout()
|
|||
|
|
|
|||
|
|
progress_bar = QProgressBar()
|
|||
|
|
progress_bar.setRange(0, 100)
|
|||
|
|
progress_bar.setValue(0)
|
|||
|
|
layout.addWidget(progress_bar)
|
|||
|
|
|
|||
|
|
status_label = QLabel(initial_text)
|
|||
|
|
layout.addWidget(status_label)
|
|||
|
|
|
|||
|
|
progress_window.setLayout(layout)
|
|||
|
|
# 将控件附加到窗口对象上,以便外部访问
|
|||
|
|
progress_window.progress_bar = progress_bar
|
|||
|
|
progress_window.status_label = status_label
|
|||
|
|
|
|||
|
|
return progress_window
|
|||
|
|
|
|||
|
|
def show_loading_dialog(self, message):
|
|||
|
|
"""显示或更新加载对话框
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
message: 要显示的加载消息
|
|||
|
|
"""
|
|||
|
|
if not self.loading_dialog:
|
|||
|
|
self.loading_dialog = QDialog(self.main_window)
|
|||
|
|
self.loading_dialog.setWindowTitle(f"请稍候 - {APP_NAME}")
|
|||
|
|
self.loading_dialog.setFixedSize(300, 100)
|
|||
|
|
self.loading_dialog.setModal(True)
|
|||
|
|
layout = QVBoxLayout()
|
|||
|
|
loading_label = QLabel(message)
|
|||
|
|
loading_label.setAlignment(Qt.AlignCenter)
|
|||
|
|
layout.addWidget(loading_label)
|
|||
|
|
self.loading_dialog.setLayout(layout)
|
|||
|
|
# 将label附加到dialog,方便后续更新
|
|||
|
|
self.loading_dialog.loading_label = loading_label
|
|||
|
|
else:
|
|||
|
|
self.loading_dialog.loading_label.setText(message)
|
|||
|
|
|
|||
|
|
self.loading_dialog.show()
|
|||
|
|
# 强制UI更新
|
|||
|
|
QApplication.processEvents()
|
|||
|
|
|
|||
|
|
def hide_loading_dialog(self):
|
|||
|
|
"""隐藏并销毁加载对话框"""
|
|||
|
|
if self.loading_dialog:
|
|||
|
|
self.loading_dialog.hide()
|
|||
|
|
self.loading_dialog = None
|
|||
|
|
|
|||
|
|
def show_simple_message(self, title, message, message_type="info"):
|
|||
|
|
"""显示简单的消息提示
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
title: 标题
|
|||
|
|
message: 消息内容
|
|||
|
|
message_type: 消息类型,可选 "info", "warning", "error", "question"
|
|||
|
|
"""
|
|||
|
|
if message_type == "question":
|
|||
|
|
buttons = QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No
|
|||
|
|
else:
|
|||
|
|
buttons = QMessageBox.StandardButton.Ok
|
|||
|
|
|
|||
|
|
msg_box = self.create_message_box(title, message, buttons)
|
|||
|
|
|
|||
|
|
if message_type == "question":
|
|||
|
|
return msg_box.exec()
|
|||
|
|
else:
|
|||
|
|
msg_box.exec()
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
def show_confirmation_dialog(self, title, message):
|
|||
|
|
"""显示确认对话框
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
title: 标题
|
|||
|
|
message: 消息内容
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
bool: 用户是否选择了确认
|
|||
|
|
"""
|
|||
|
|
msg_box = self.create_message_box(
|
|||
|
|
title,
|
|||
|
|
message,
|
|||
|
|
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No
|
|||
|
|
)
|
|||
|
|
return msg_box.exec() == QMessageBox.StandardButton.Yes
|