Files
leonapp/pyqt5fluentdesign/app_detail_window.py

142 lines
5.4 KiB
Python
Raw Normal View History

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()