Init 1.0 codes

This commit is contained in:
2025-09-20 22:20:08 +08:00
commit 49922cc006
2294 changed files with 426627 additions and 0 deletions

128
pyqt5fluentdesign/README.md Normal file
View File

@@ -0,0 +1,128 @@
# LeonApp GUI
基于PyQt5和Fluent Design的App Store API图形界面工具提供美观、易用的交互方式来访问和管理App Store的各种API功能。
## 功能特性
- **现代化界面**采用Fluent Design风格提供优雅、直观的用户界面
- **应用管理**:查看所有应用列表、获取应用详细信息、搜索应用
- **标签管理**:查看所有标签、获取标签下的应用列表
- **开发者管理**:查看开发者的应用列表、获取开发者详细信息
- **公告管理**:查看所有公告信息
- **统计信息**:获取应用商店的统计数据(应用总数、开发者总数等)
- **异步操作**使用多线程进行API请求避免界面卡顿
- **分页支持**:支持列表数据的分页浏览
- **错误处理**:友好的错误提示和信息反馈
- **响应式设计**:适配不同屏幕尺寸
## 环境要求
- Python 3.6 或更高版本
- PyQt5 及其依赖库
## 安装指南
1. 确保你已安装Python 3.6或更高版本
2. 克隆或下载此项目到本地
3. 安装依赖包:
```bash
cd pyqt5fluentdesign
pip install -r requirements.txt
```
4. 运行应用程序:
```bash
python leonapp_gui.py
```
## 使用方法
### 主界面
应用启动后,你会看到一个包含多个标签页的主界面,每个标签页对应不同的功能模块:
- **应用管理**:查看、搜索和浏览应用列表
- **标签管理**:查看所有标签和标签下的应用
- **开发者管理**:查看开发者的应用和信息
- **公告管理**:查看所有公告
- **统计信息**:查看应用商店的统计数据
### 应用管理
在"应用管理"标签页中:
1. 应用列表默认显示所有应用每页显示20个
2. 你可以在搜索框中输入关键词搜索应用
3. 可以通过下拉框调整每页显示的应用数量
4. 双击表格中的任意应用,可以查看应用的详细信息
5. 使用"上一页"和"下一页"按钮浏览更多应用
### 应用详情
应用详情窗口显示了应用的完整信息,包括:
- 应用名称、版本、年龄分级
- 应用描述
- 应用评分和下载量
- 应用标签
- 版本历史
- 图片数量
### 标签管理
在"标签管理"标签页中:
1. 标签列表显示了所有可用的标签
2. 双击表格中的任意标签,可以查看该标签下的所有应用
### 开发者管理
在"开发者管理"标签页中:
1. 输入开发者ID
2. 点击"查看应用列表"按钮,可以查看该开发者创建的所有应用
3. 点击"查看开发者信息"按钮,可以查看该开发者的详细信息
### 公告管理
在"公告管理"标签页中:
1. 公告列表显示了所有公告
2. 使用"上一页"和"下一页"按钮浏览更多公告
3. 双击表格中的任意公告,可以查看公告详情
### 统计信息
在"统计信息"标签页中:
1. 显示了应用商店的关键统计数据
2. 点击"刷新统计数据"按钮,可以更新统计信息
## 配置
目前API基础URL是硬编码在`leonapp_gui.py`文件中的:`http://leonmmcoset.jjxmm.win:8010/api.php`。如果你的API地址不同你需要修改文件中的`api_base_url`变量。
## 注意事项
1. 确保API服务器正在运行并且可以从你的计算机访问
2. 如果遇到连接问题,请检查网络连接和防火墙设置
3. 程序使用了多线程处理API请求确保你的系统支持多线程操作
4. 对于大数据量的操作,可能需要一些时间来完成数据加载
## 许可证
[MIT License](LICENSE)
## 作者
LeonApp GUI Team
## 更新日志
### v1.0.0
- 初始版本,支持所有基本功能
- 提供现代化的Fluent Design界面
- 支持异步操作和分页浏览
- 完善的错误处理和用户反馈

158
pyqt5fluentdesign/config.py Normal file
View File

@@ -0,0 +1,158 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
配置文件 - 存储LeonApp GUI应用的配置信息
"""
# API相关配置
API_CONFIG = {
# API基础URL
'BASE_URL': 'http://localhost/PHP/APP%20Store/api.php',
# 请求超时时间(秒)
'TIMEOUT': 10,
# 默认每页显示数量
'DEFAULT_PAGE_SIZE': 20,
# 重试次数
'RETRY_COUNT': 3,
# 请求头
'HEADERS': {
'Content-Type': 'application/json',
'User-Agent': 'LeonApp-GUI-Client/1.0.0'
}
}
# 界面相关配置
UI_CONFIG = {
# 窗口标题
'WINDOW_TITLE': 'LeonApp 应用商店客户端',
# 默认窗口大小
'DEFAULT_WIDTH': 1000,
'DEFAULT_HEIGHT': 700,
# 最小窗口大小
'MIN_WIDTH': 800,
'MIN_HEIGHT': 600,
# 主题设置
'THEME': {
# 支持 'light' 和 'dark'
'DEFAULT_THEME': 'light',
# 是否跟随系统主题
'FOLLOW_SYSTEM_THEME': True
},
# 显示设置
'DISPLAY': {
# 是否显示状态栏
'SHOW_STATUS_BAR': True,
# 是否显示工具栏
'SHOW_TOOL_BAR': True,
# 详情窗口宽度占比
'DETAIL_WIDTH_RATIO': 0.4
}
}
# 缓存相关配置
CACHE_CONFIG = {
# 是否启用缓存
'ENABLE_CACHE': True,
# 缓存目录
'CACHE_DIR': './cache',
# 缓存过期时间(秒)
'CACHE_EXPIRY': {
'APPS': 3600, # 应用列表缓存1小时
'TAGS': 86400, # 标签缓存24小时
'DEVELOPERS': 86400, # 开发者缓存24小时
'ANNOUNCEMENTS': 3600, # 公告缓存1小时
'STATS': 3600 # 统计信息缓存1小时
}
}
# 日志相关配置
LOG_CONFIG = {
# 日志级别DEBUG, INFO, WARNING, ERROR, CRITICAL
'LOG_LEVEL': 'INFO',
# 是否保存日志到文件
'LOG_TO_FILE': True,
# 日志文件路径
'LOG_FILE': './logs/leonapp_gui.log',
# 日志文件大小上限(字节)
'LOG_FILE_MAX_SIZE': 10 * 1024 * 1024, # 10MB
# 日志文件备份数量
'LOG_BACKUP_COUNT': 5
}
# 网络连接测试配置
NETWORK_CONFIG = {
# 连接测试间隔(秒)
'TEST_INTERVAL': 60,
# 测试URL
'TEST_URL': 'http://localhost/PHP/APP%20Store/api.php?t=stats'
}
# 搜索相关配置
SEARCH_CONFIG = {
# 搜索延迟(毫秒) - 用于实时搜索
'SEARCH_DELAY': 500,
# 搜索结果最小字符数
'MIN_SEARCH_CHARS': 2
}
# 下载相关配置
DOWNLOAD_CONFIG = {
# 默认下载目录
'DEFAULT_DOWNLOAD_DIR': './downloads',
# 下载线程数
'DOWNLOAD_THREADS': 3
}
# 通知相关配置
NOTIFICATION_CONFIG = {
# 是否启用桌面通知
'ENABLE_DESKTOP_NOTIFICATIONS': True,
# 通知显示时间(秒)
'NOTIFICATION_DISPLAY_TIME': 5
}
# 语言配置
LANGUAGE_CONFIG = {
# 支持的语言
'SUPPORTED_LANGUAGES': ['zh_CN', 'en_US'],
# 默认语言
'DEFAULT_LANGUAGE': 'zh_CN',
# 是否跟随系统语言
'FOLLOW_SYSTEM_LANGUAGE': True
}
# 安全相关配置
SECURITY_CONFIG = {
# 是否验证SSL证书
'VERIFY_SSL': False,
# 启用数据加密
'ENABLE_ENCRYPTION': False,
# 加密密钥仅当ENABLE_ENCRYPTION为True时有效
'ENCRYPTION_KEY': 'your-encryption-key-here'
}

View File

@@ -0,0 +1,250 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PyQt5 Fluent Design示例 - 展示基本的Fluent Design组件用法
"""
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel
from PyQt5.QtCore import Qt
from qfluentwidgets import (
PushButton, PrimaryPushButton, DefaultPushButton,
LineEdit, Slider, CheckBox, RadioButton, SwitchButton,
ComboBox, SpinBox, DoubleSpinBox,
CardWidget, TitleLabel, SubtitleLabel, BodyLabel, CaptionLabel,
ProgressBar, Avatar, ToolTipFilter,
FluentTranslator
)
class FluentDesignExample(QWidget):
"""Fluent Design组件示例窗口"""
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt5 Fluent Design示例")
self.resize(800, 600)
self.init_ui()
def init_ui(self):
"""初始化界面"""
# 创建主布局
main_layout = QVBoxLayout(self)
main_layout.setContentsMargins(20, 20, 20, 20)
main_layout.setSpacing(20)
# 添加标题
title = TitleLabel("PyQt5 Fluent Design组件展示")
subtitle = SubtitleLabel("本示例展示了PyQt-Fluent-Widgets库的基本组件用法")
main_layout.addWidget(title)
main_layout.addWidget(subtitle)
# 创建按钮示例卡片
buttons_card = CardWidget()
buttons_layout = QVBoxLayout(buttons_card)
buttons_layout.setContentsMargins(20, 20, 20, 20)
buttons_title = SubtitleLabel("按钮组件")
buttons_layout.addWidget(buttons_title)
# 按钮布局
buttons_row = QHBoxLayout()
buttons_row.setSpacing(10)
# 标准按钮
standard_button = PushButton("标准按钮")
buttons_row.addWidget(standard_button)
# 主要按钮
primary_button = PrimaryPushButton("主要按钮")
buttons_row.addWidget(primary_button)
# 默认按钮
default_button = DefaultPushButton("默认按钮")
buttons_row.addWidget(default_button)
buttons_layout.addLayout(buttons_row)
main_layout.addWidget(buttons_card)
# 创建输入控件示例卡片
inputs_card = CardWidget()
inputs_layout = QVBoxLayout(inputs_card)
inputs_layout.setContentsMargins(20, 20, 20, 20)
inputs_title = SubtitleLabel("输入控件")
inputs_layout.addWidget(inputs_title)
# 文本输入框
text_input = LineEdit()
text_input.setPlaceholderText("请输入文本...")
inputs_layout.addWidget(text_input)
# 数字输入框
spin_boxes_layout = QHBoxLayout()
spin_boxes_layout.setSpacing(10)
spin_box = SpinBox()
spin_box.setRange(0, 100)
spin_box.setValue(50)
spin_boxes_layout.addWidget(QLabel("整数:"))
spin_boxes_layout.addWidget(spin_box)
double_spin_box = DoubleSpinBox()
double_spin_box.setRange(0.0, 1.0)
double_spin_box.setSingleStep(0.1)
double_spin_box.setValue(0.5)
spin_boxes_layout.addWidget(QLabel("浮点数:"))
spin_boxes_layout.addWidget(double_spin_box)
inputs_layout.addLayout(spin_boxes_layout)
# 下拉列表
combo_box = ComboBox()
combo_box.addItems(["选项 1", "选项 2", "选项 3", "选项 4", "选项 5"])
combo_box.setCurrentIndex(0)
inputs_layout.addWidget(combo_box)
main_layout.addWidget(inputs_card)
# 创建选择控件示例卡片
selection_card = CardWidget()
selection_layout = QVBoxLayout(selection_card)
selection_layout.setContentsMargins(20, 20, 20, 20)
selection_title = SubtitleLabel("选择控件")
selection_layout.addWidget(selection_title)
# 复选框
checkbox_layout = QHBoxLayout()
checkbox_layout.setSpacing(20)
checkbox1 = CheckBox("选项 1")
checkbox2 = CheckBox("选项 2")
checkbox3 = CheckBox("选项 3")
checkbox3.setChecked(True)
checkbox_layout.addWidget(checkbox1)
checkbox_layout.addWidget(checkbox2)
checkbox_layout.addWidget(checkbox3)
selection_layout.addLayout(checkbox_layout)
# 单选按钮
radio_layout = QHBoxLayout()
radio_layout.setSpacing(20)
radio1 = RadioButton("选项 A")
radio2 = RadioButton("选项 B")
radio3 = RadioButton("选项 C")
radio1.setChecked(True)
radio_layout.addWidget(radio1)
radio_layout.addWidget(radio2)
radio_layout.addWidget(radio3)
selection_layout.addLayout(radio_layout)
# 开关按钮
switch_layout = QHBoxLayout()
switch_layout.setSpacing(10)
switch_label = QLabel("启用功能:")
switch_button = SwitchButton()
switch_button.setChecked(True)
switch_layout.addWidget(switch_label)
switch_layout.addWidget(switch_button)
switch_layout.addStretch()
selection_layout.addLayout(switch_layout)
main_layout.addWidget(selection_card)
# 创建进度条示例卡片
progress_card = CardWidget()
progress_layout = QVBoxLayout(progress_card)
progress_layout.setContentsMargins(20, 20, 20, 20)
progress_title = SubtitleLabel("进度条")
progress_layout.addWidget(progress_title)
# 水平进度条
progress_bar = ProgressBar()
progress_bar.setValue(65)
progress_layout.addWidget(progress_bar)
main_layout.addWidget(progress_card)
# 创建标签和头像示例卡片
misc_card = CardWidget()
misc_layout = QVBoxLayout(misc_card)
misc_layout.setContentsMargins(20, 20, 20, 20)
misc_title = SubtitleLabel("文本标签和头像")
misc_layout.addWidget(misc_title)
# 文本标签
labels_layout = QVBoxLayout()
labels_layout.setSpacing(5)
title_label = TitleLabel("标题文本")
subtitle_label = SubtitleLabel("副标题文本")
body_label = BodyLabel("正文文本,这是一个普通的正文文本示例")
caption_label = CaptionLabel("说明文本,通常用于辅助信息")
labels_layout.addWidget(title_label)
labels_layout.addWidget(subtitle_label)
labels_layout.addWidget(body_label)
labels_layout.addWidget(caption_label)
misc_layout.addLayout(labels_layout)
# 头像
avatar_layout = QHBoxLayout()
avatar_layout.setSpacing(10)
avatar1 = Avatar("用户A", size=48)
avatar2 = Avatar("用户B", size=64)
avatar3 = Avatar("用户C", size=32)
# 添加工具提示
avatar1.installEventFilter(ToolTipFilter(avatar1))
avatar1.setToolTip("用户A的头像")
avatar2.installEventFilter(ToolTipFilter(avatar2))
avatar2.setToolTip("用户B的头像")
avatar3.installEventFilter(ToolTipFilter(avatar3))
avatar3.setToolTip("用户C的头像")
avatar_layout.addWidget(avatar1)
avatar_layout.addWidget(avatar2)
avatar_layout.addWidget(avatar3)
avatar_layout.addStretch()
misc_layout.addLayout(avatar_layout)
main_layout.addWidget(misc_card)
# 添加底部信息
footer = CaptionLabel("PyQt5 Fluent Design示例 v1.0.0")
footer.setAlignment(Qt.AlignCenter)
main_layout.addWidget(footer)
# 添加伸缩项,使内容居中
main_layout.addStretch(1)
if __name__ == "__main__":
# 创建应用实例
app = QApplication(sys.argv)
# 添加中文支持
translator = FluentTranslator()
app.installTranslator(translator)
# 创建并显示主窗口
window = FluentDesignExample()
window.show()
# 运行应用
sys.exit(app.exec_())

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,5 @@
PyQt5==5.15.7
PyQt5-Qt5==5.15.2
PyQt5-sip==12.11.0
requests==2.31.0
PyQt-Fluent-Widgets==1.8.7