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