Files
leonapp/pyqt5fluentdesign/app_detail_window.py
Leonmmcoset dd85397efa feat(app_detail_window): 新增应用详情窗口独立组件
refactor(leonapp_gui): 重构应用详情展示逻辑,直接创建窗口实例
fix(version_control.php): 修复文件路径处理和删除逻辑问题
feat(upload_app.php): 添加Markdown预览功能
style(dashboard.php): 移除冗余的padding样式
chore: 更新favicon和清理pyc缓存文件
2025-09-21 17:02:11 +08:00

142 lines
5.4 KiB
Python

from PyQt5.QtWidgets import (QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel,
QPushButton, QTextEdit, QGroupBox, QFormLayout, QScrollArea)
from PyQt5.QtCore import Qt
from qfluentwidgets import (InfoBar, InfoBarPosition, TitleLabel, SubtitleLabel,
PrimaryPushButton, PushButton)
import json
class AppDetailWindow(QMainWindow):
def __init__(self, api_client, app_id, parent=None):
super().__init__(parent)
self.api_client = api_client
self.app_id = app_id
self.parent_window = parent
# 设置窗口属性
self.setWindowTitle("应用详情")
self.resize(800, 600)
# 创建中心部件
self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)
# 创建主布局
self.main_layout = QVBoxLayout(self.central_widget)
# 创建标题区域
self.title_layout = QHBoxLayout()
self.title_label = TitleLabel("应用详情")
self.close_button = PushButton("关闭")
self.close_button.clicked.connect(self.close)
self.title_layout.addWidget(self.title_label)
self.title_layout.addStretch()
self.title_layout.addWidget(self.close_button)
# 创建滚动区域
self.scroll_area = QScrollArea()
self.scroll_area.setWidgetResizable(True)
self.scroll_content = QWidget()
self.scroll_layout = QVBoxLayout(self.scroll_content)
# 添加滚动区域到主布局
self.scroll_area.setWidget(self.scroll_content)
# 将标题区域和滚动区域添加到主布局
self.main_layout.addLayout(self.title_layout)
self.main_layout.addWidget(self.scroll_area)
# 加载应用详情
self.load_app_detail()
def load_app_detail(self):
"""加载应用详情"""
try:
# 这里应该调用API获取应用详情
# 暂时使用模拟数据
app_data = {
"id": self.app_id,
"name": "示例应用",
"description": "这是一个示例应用,用于展示应用详情页面",
"developer_id": "1",
"developer_name": "示例开发者",
"status": "approved",
"version": "1.0.0",
"created_at": "2023-01-01 10:00:00"
}
# 清空滚动区域
for i in reversed(range(self.scroll_layout.count())):
widget = self.scroll_layout.itemAt(i).widget()
if widget is not None:
widget.setParent(None)
widget.deleteLater()
# 显示应用基本信息
self.display_app_info(app_data)
# 显示应用描述
self.display_app_description(app_data)
# 显示操作按钮
self.display_action_buttons()
except Exception as e:
InfoBar.error(
title="错误",
content=f"加载应用详情失败: {str(e)}",
orient=Qt.Horizontal,
isClosable=True,
position=InfoBarPosition.TOP,
duration=3000,
parent=self
)
def display_app_info(self, app_data):
"""显示应用基本信息"""
info_group = QGroupBox("基本信息")
info_layout = QFormLayout()
# 设置表单布局标签对齐
info_layout.setLabelAlignment(Qt.AlignRight | Qt.AlignVCenter)
# 添加基本信息字段
info_layout.addRow("应用ID:", QLabel(app_data.get("id", "--")))
info_layout.addRow("应用名称:", QLabel(app_data.get("name", "--")))
info_layout.addRow("开发者ID:", QLabel(app_data.get("developer_id", "--")))
info_layout.addRow("开发者名称:", QLabel(app_data.get("developer_name", "--")))
info_layout.addRow("应用状态:", QLabel(app_data.get("status", "--")))
info_layout.addRow("当前版本:", QLabel(app_data.get("version", "--")))
info_layout.addRow("创建时间:", QLabel(app_data.get("created_at", "--")))
info_group.setLayout(info_layout)
self.scroll_layout.addWidget(info_group)
def display_app_description(self, app_data):
"""显示应用描述"""
description_group = QGroupBox("应用描述")
description_layout = QVBoxLayout()
description_text = QTextEdit()
description_text.setReadOnly(True)
description_text.setPlainText(app_data.get("description", "无描述信息"))
description_layout.addWidget(description_text)
description_group.setLayout(description_layout)
self.scroll_layout.addWidget(description_group)
def display_action_buttons(self):
"""显示操作按钮"""
buttons_layout = QHBoxLayout()
buttons_layout.addStretch()
refresh_button = PushButton("刷新")
refresh_button.clicked.connect(self.load_app_detail)
buttons_layout.addWidget(refresh_button)
self.scroll_layout.addLayout(buttons_layout)
def closeEvent(self, event):
"""关闭窗口事件"""
# 如果需要在关闭时执行清理操作,可以在这里添加
event.accept()