Skip to content

Commit 845ee9b

Browse files
committed
ntr这块
1 parent f79b5a6 commit 845ee9b

13 files changed

Lines changed: 643 additions & 604 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
*.zip
2+
__pycache__

README.md

Lines changed: 4 additions & 230 deletions
Original file line numberDiff line numberDiff line change
@@ -1,233 +1,7 @@
1-
# SecRandom 插件系统
1+
# SecPicker
22

3-
## 概述
3+
在SecRandom上运行NamePicker
44

5-
SecRandom 插件系统为应用程序提供了灵活的扩展机制。通过插件系统,开发者可以轻松地添加新功能、扩展现有功能,并与主系统深度集成。
5+
仅供娱乐,需要使用NamePicker请前往[源仓库](https://github.com/NamePickerOrg/NamePicker)
66

7-
## 插件目录结构
8-
9-
```
10-
app/plugin/
11-
├── example_plugin/ # 示例插件
12-
│ ├── plugin.json # 插件配置文件
13-
│ ├── main.py # 插件主程序
14-
│ └── README.md # 插件说明文档
15-
└── [其他插件]/ # 其他插件目录
16-
├── plugin.json
17-
├── main.py
18-
└── README.md
19-
```
20-
21-
## 建议
22-
23-
- **插件开发建议使用SecRandom已有的内置库,这样不用安装额外的库,也不会产生更复杂的教程**
24-
- **插件开发建议使用开发SecRandom的Python版本(或更高版本),这样可以避免版本冲突**
25-
- **插件开发建议使用SecRandom的日志库(loguru),这样可以方便地记录插件运行日志(建议存储在你自己插件目录下的log文件中)**
26-
- **插件开发建议使用SecRandom的配置库(json),这样可以方便地读取插件配置文件(建议存储在你自己插件目录下的config文件中)**
27-
28-
## 插件开发要点
29-
30-
### 1. 必需文件
31-
32-
每个插件必须包含以下文件:
33-
34-
- **plugin.json**: 插件配置文件,定义插件的基本信息
35-
- **main.py**: 插件主程序,包含插件的核心功能
36-
- **README.md**: 插件说明文档,提供使用指南
37-
38-
### 2. 插件配置文件 (plugin.json)
39-
40-
```json
41-
{
42-
"name": "插件名称",
43-
"version": "1.0.0",
44-
"description": "插件功能描述",
45-
"author": "插件作者",
46-
"entry_point": "main.py",
47-
"background_service": "service.py",
48-
"min_app_version": "1.0.0.0",
49-
"dependencies": [],
50-
"enabled": true,
51-
"autostart": false
52-
}
53-
```
54-
55-
### 3. 插件主程序 (main.py)
56-
57-
```python
58-
# 导入必要的库
59-
import json
60-
import os
61-
from typing import Dict, List, Optional
62-
from qfluentwidgets import *
63-
from PyQt5.QtWidgets import *
64-
from PyQt5.QtCore import *
65-
from PyQt5.QtGui import *
66-
from loguru import logger
67-
68-
# 插件类
69-
class MyPlugin:
70-
def __init__(self):
71-
self.config_path = "app/plugin/my_plugin/config.json"
72-
self.config = {}
73-
self.load_config()
74-
75-
def load_config(self):
76-
"""加载配置"""
77-
try:
78-
if os.path.exists(self.config_path):
79-
with open(self.config_path, 'r', encoding='utf-8') as f:
80-
self.config = json.load(f)
81-
except Exception as e:
82-
logger.error(f"加载配置失败: {e}")
83-
84-
def get_info(self) -> Dict:
85-
"""获取插件信息"""
86-
return {
87-
"name": "我的插件",
88-
"version": "1.0.0",
89-
"description": "插件描述"
90-
}
91-
92-
def execute(self, *args, **kwargs):
93-
"""执行插件功能"""
94-
return "插件执行成功"
95-
96-
# API 函数
97-
def show_dialog(parent=None):
98-
"""显示插件界面"""
99-
dialog = __MyPluginDialog(parent) # 例子
100-
dialog.exec_()
101-
102-
def get_plugin_info() -> Dict:
103-
"""获取插件信息"""
104-
plugin = MyPlugin()
105-
return plugin.get_info()
106-
```
107-
108-
### 4. 插件服务
109-
110-
如果插件需要在后台运行服务,应在 `service.py` 文件中实现:
111-
112-
```python
113-
class MyPluginService:
114-
def __init__(self):
115-
# 初始化服务
116-
pass
117-
118-
def start(self):
119-
# 启动服务
120-
pass
121-
122-
def stop(self):
123-
# 停止服务
124-
pass
125-
```
126-
127-
## 插件系统特性
128-
129-
### 核心优势
130-
131-
1. **模块化设计**: 每个插件都是独立的模块,便于开发和维护
132-
2. **易于集成**: 提供标准的API接口,与主系统无缝集成
133-
3. **配置灵活**: 支持动态配置,用户可以自定义插件行为
134-
4. **界面统一**: 使用 qfluentwidgets 保持界面风格一致
135-
5. **错误处理**: 完善的异常处理和日志记录机制
136-
137-
### 技术特点
138-
139-
- **基于 PyQt5**: 使用成熟的桌面应用框架
140-
- **配置管理**: JSON 格式的配置文件,易于编辑和备份
141-
- **日志系统**: 集成 loguru 日志库,便于调试和监控
142-
- **信号槽机制**: 支持事件驱动的编程模式
143-
- **类型提示**: 使用 Python 类型提示,提高代码质量
144-
145-
## 开发指南
146-
147-
### 1. 环境要求
148-
149-
- Python 3.8.10+
150-
- PyQt5
151-
- qfluentwidgets
152-
- loguru
153-
154-
### 2. 开发步骤
155-
156-
1. **创建插件目录**: 在 `app/plugin/` 下创建插件目录
157-
2. **编写配置文件**: 创建 `plugin.json` 定义插件信息
158-
3. **实现主程序**: 编写 `main.py` 实现插件功能
159-
4. **实现服务**: 如果需要后台服务,编写 `service.py`
160-
5. **添加界面**: 创建图形界面(如需要)
161-
6. **编写文档**: 创建 `README.md` 说明插件用法
162-
7. **测试调试**: 测试插件功能并调试问题
163-
8. **打包发布**: 打包插件为 zip 文件,发布到插件广场
164-
165-
### 3. 最佳实践
166-
167-
- **命名规范**: 使用清晰的命名约定
168-
- **错误处理**: 添加适当的异常处理
169-
- **日志记录**: 记录重要的操作和错误
170-
- **配置管理**: 合理使用配置文件
171-
- **界面设计**: 遵循主系统的界面风格
172-
173-
### 4. 调试技巧
174-
175-
```python
176-
# 在 main.py 末尾添加测试代码
177-
if __name__ == "__main__":
178-
app = QApplication([])
179-
# 测试插件功能
180-
dialog = MyDialog()
181-
dialog.show()
182-
app.exec_()
183-
```
184-
185-
### 5. 软件没有对应库的情况
186-
187-
在插件系统中,如果软件没有对应库的情况,需要在插件的 `plugin.json` 文件中添加 `dependencies` 字段,指定插件依赖的库。例如:
188-
189-
```json
190-
{
191-
"name": "插件名称",
192-
"version": "1.0.0",
193-
"description": "插件功能描述",
194-
"author": "插件作者",
195-
"entry_point": "main.py",
196-
"min_app_version": "1.0.0",
197-
"dependencies": ["transformers", "torch"],
198-
"enabled": true
199-
}
200-
```
201-
202-
### 6. SecRandom 程序逻辑是怎么安装python库的?
203-
204-
SecRandom 程序在启动时会检查插件目录下的 `plugin.json` 文件,根据 `dependencies` 字段安装插件依赖的库。如果库不存在,程序会自动从 PyPI 下载并安装。
205-
206-
### 7. 插件的依赖库是怎么管理的?
207-
208-
插件的依赖库会被安装到 SecRandom 程序插件目录下的 `site-packages` 目录下。每个插件的依赖库都是独立的,不会与其它插件的库冲突。
209-
210-
## 现有插件
211-
212-
### 1. 示例插件 (example_plugin)
213-
- **功能**: 演示插件系统的基本功能
214-
- **位置**: `app/plugin/example_plugin/`
215-
- **用途**: 提供插件开发的示例
216-
217-
## 常见问题
218-
219-
### Q: 如何创建一个新的插件?
220-
A: 复制 `example_plugin` 目录,修改其中的文件来实现你的功能。
221-
222-
### Q: 插件如何与主系统通信?
223-
A: 可以通过信号槽、事件系统或直接调用主系统API来实现通信。
224-
225-
### Q: 如何处理插件的配置?
226-
A: 使用 JSON 格式的配置文件,在插件初始化时加载,修改时保存。
227-
228-
### Q: 插件的界面如何保持一致?
229-
A: 使用 qfluentwidgets 库创建界面,遵循主系统的设计规范。
230-
231-
---
232-
233-
© 2025 SecRandom. All rights reserved.
7+
基于NamePicker v2.0.2d1dev魔改而成(删除了浮窗,名单编辑,插件功能等等)

0 commit comments

Comments
 (0)