网易首页 > 网易号 > 正文 申请入驻

小白也能使用的python工具,开箱即用量化程序,内含QMT通达信监控交易

0
分享至

使用方法 1. 下载与安装

在 sanrenjz - 三人聚智-余汉波[https://www.sanrenjz.com/sanrenjz/]的版本介绍中找到你需要版本,然后进行下载解压,解压之后双击“三人聚智-余汉波程序控制工具.exe”便可运行程序,绿色版本,不需安装。


若是 QMT 量化交易的小白建议 yuhanbopy-lh 版本,该版内嵌 python 和 mini QMT 的库 xquant,省略复杂的配置。

因为应用是嵌入 python 和 xquant 库的,解压后有近 900M,下载消耗的资源较多,每次下载,这边需向腾讯云支付约 0.2 元。所以,为减少某些不必要的资源消耗,请关注订阅号"余汉波",发送"资源下载"获取验证码,输入验证码进行下载。

若能访问 github,也可以拉取整个库,或通过夸克网盘下载,这边就不用支付相应的资源流量费。若愿意在程序小店付费下载就更好了,0.99 元。

2. python 程序代码的加载

程序中显示的所有 python 程序代码是放在本地文件夹resources\app\software中,将需要运行的代码放到该文件夹中便可运行(最好一个 python 程序或代码创建一个文件夹,以免混杂,更好管理),而运行只需双击更可。

加载代码程序的方法有三种:

  1. 程序小店的代码程序:双击“腾讯云对象存储下载器”,会出现下面的界面,只需将在程序小店购买获得的链接粘贴到“下载地址”便可。程序就会进行下载并解压文件到resources\app\software中,在应用层主界面就能看到该程序。


  1. github 的代码程序:如果你的代码是在 github 上,那么只需双击"GiHub 仓库下载器",将仓库地址粘贴上来;选择保存位置,最好是应用的resources\app\software文件夹;点击“克隆仓库”便可拉取整个仓库,自动解压到resources\app\software中,在应用层主界面就能看到该程序。


  1. 手动加载:如果你的代码是自己写的,或来自于其他路径,那么可以点击菜单栏的“本地文件”,建议加载整个文件夹,会将整个文件复制到resources\app\software文件夹中,容易管理的同时,可以加载相应的说明等,而不是看不懂的文件。


3. 程序代码的使用

将程序代码加载进来后,双击便可运行。第一次运行可能会较慢,程序会检查程序代码文件夹的 requirements.txt 文件。若库 requirements.txt 载明的库已经安装会跳过,否则会从 pip ,阿里云镜像或清华镜像中拉取相应的库,进行安装。

若需手动安装相应的库,你可以通过双击“终端模拟器”打开终端,输入 pip 等进行手动安装。

若你的库是自己开发的,或者不是开源库,需要自己将文件放到resources\python\python-3.12.8-embed-amd64\Lib\site-packages文件夹内。

功能介绍 1. 基本功能

  • 这是一个基于 Electron 的桌面应用程序,用于管理和运行 Python 脚本,用于提高开发和文件管理效率。

  • 支持加密和非加密的 Python 程序

  • 提供实时运行日志显示

  • 自动管理 Python 依赖

2. 版本使用和下载

该程序共提供三个版本,分别命名为:yuhanbopy-xl、yuhanbopy-lh 和 yuhanbopy-mini。其中 yuhanbopy-lh 在 github 的进行开源,地址 yuhanbo758/yuhanbopy-app: 三人聚智-余汉波程序控制工具[https://github.com/yuhanbo758/yuhanbopy-app],基于 MIT 许可证发布。

  • 夸克网盘: 三人聚智-余汉波程序控制工具[https://pan.quark.cn/s/b13845a1c589]

  • 付费下载: 三人聚智-余汉波程序控制工具使用说明 | 三人聚智-余汉波程序小店[https://jy.sanrenjz.com/buy/2]

  1. yuhanbopy-xl:有嵌入版 python,无需另外安装 python,适用于电脑小白,下载解压直接使用,效率优先。

  2. yuhanbopy-lh:在 yuhanbopy-xl 基础上,植入了 mini QMT 的库 xquant,主要对象是需要小 QMT 量化交易的小白,可以直接加载运行个人提供“通达信与 QMT 结合下单”的 tdx3 程序。

  3. yuhanbopy-mini:yuhanbopy-xl 的 mini 版,没有嵌入版 python,安装后首次启动时,系统会要求选择 Python 解释器(.exe 文件)


3. 程序目录结构

主要程序存放在 app/software 目录下,主要包含三个格式文件,py 或 enc 文件、settings.json 文件和 requirements.txt 文件:

3.1 单文件程序

  • 支持 .py 文件(普通 Python 文件)

  • 支持 .enc 文件(加密的 Python 文件)

3.2 文件夹程序

每个程序文件夹可以包含 json 相关说明,示例:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

{     "name": "程序名称",     "description": "程序描述",     "main_file": "主程序文件名.py",     "version": "版本号",     "author": "作者",     "category": "分类" }

3.3 依赖管理
  • 在程序目录中可以放置 requirements.txt 文件

  • 系统会自动检查并安装缺失的依赖

  • 使用多个 pip 源以提高安装成功率:

    • pypi.org

    • 清华大学镜像

    • 阿里云镜像

4. 程序运行
  • Windows 64 位操作系统

  • 程序列表会显示所有可用的 Python 程序——若文件夹中有 settings.json 文件,显示指定 py 文件,否则显示文件夹中所有 py 文件。

  • 双击列表中的程序即可运行

  • 运行时会自动打开日志窗口,显示程序输出

  • 如果程序有依赖项(requirements.txt 文件),会自动安装所需依赖

  • 需加载本地 python 代码,点击右上角“本地文件”,选择 py 文件或文件夹,会将文件或文件夹复制到 app/software 下,创建项目。


5. 安全特性

  • 支持 AES-256-CBC 加密的 Python 程序(.enc 文件)

  • 加密程序运行时会自动解密到临时目录

  • 程序结束后自动清理临时文件

6. 注意事项
  • 若是 yuhanbopy-mini 应用,确保 Python 解释器路径正确设置

  • 建议在程序目录中提供 requirements.txt 声明依赖

  • 加密程序需要使用特定的加密工具进行加密

  • 程序运行时保持日志窗口打开可查看实时输出

7. 错误处理
  • 如果遇到 Python 环境问题,可以通过界面重新选择 Python 解释器,或卸载重装

  • 依赖安装失败时,日志窗口会显示详细错误信息

  • 程序运行错误会在日志窗口中显示具体原因

这个工具设计得比较完善,特别适合管理和分发 Python 程序,同时通过加密机制保护源代码安全。

8. 已集成应用

  • 终端模拟器: 内置终端工具,支持命令行操作
  • 文件下载器: 通用的文件下载工具,支持多种文件格式
  • GitHub 仓库下载器: 便捷的 GitHub 仓库克隆和下载工具
  • 腾讯云对象存储下载器: 专用的腾讯云 COS 文件下载工具
  • 同花顺板块自动交易系统: 基于同花顺板块的自动交易系统
  • 通达信板块自动交易系统 4.0: 基于通达信和国金 QMT 的自动化交易系统
  • 问财单策略量化交易系统 2.0: 基于问财自然语言查询的量化交易系统
  • 自定义工具集成: 可扩展的工具集成平台
8.1 系统工具 终端模拟器
  • 功能: 简单的终端模拟器,可以执行系统命令
  • 使用方法:
    • 输入任何系统命令来执行

    • 输入 'exit' 或 'quit' 退出程序

    • 输入 'clear' 清除屏幕

    • 输入 'cd 目录路径' 切换工作目录

8.2 下载工具 文件下载器
  • 功能: 通用的文件下载工具
  • 使用方法:
  1. 在输入框中粘贴文件下载地址

  2. 选择文件保存位置

  3. 选择是否自动解压 ZIP 文件

GitHub 仓库下载器
  • 功能: GitHub 仓库克隆工具
  • 使用方法:
  1. 在输入框中粘贴 GitHub 仓库地址

  2. 选择保存位置

  3. 选择是否自动解压

腾讯云对象存储下载器
  • 功能: 腾讯云对象存储文件下载工具
  • 使用方法:
  1. 在输入框中粘贴文件下载地址

  2. 文件将保存到 app/software/ 目录

  3. ZIP 文件会自动解压

8.3 量化交易系统 同花顺板块自动交易系统
  • 功能: 基于同花顺板块的自动交易系统,支持股票和可转债的自动买卖
  • 主要特点:
  1. 自动监控同花顺自定义板块变化

  2. 根据板块内容自动买入或卖出股票

  3. 支持设置交易间隔、单笔金额和总金额

  4. 支持多种委托方式和价格调整

  5. 实时日志显示交易状态

通达信板块自动交易系统 4.0
  • 功能: 基于通达信和国金 QMT 的自动化交易系统
  • 主要特点:
  1. 支持自定义买入卖出板块监控

  2. 灵活的交易参数设置

  3. 实时委托和成交反馈

  4. 智能资金管理和风控

  5. 完整的日志记录系统

问财单策略量化交易系统 2.0
  • 功能: 基于问财自然语言查询的量化交易系统
  • 主要特点:
  1. 支持通过自然语言查询选股

  2. 自动执行交易策略

  3. 实时查看持仓和资产信息

  4. 定时执行策略

  5. 支持股票、基金、可转债等多种证券类型

9. 插件开发指南

本章节将指导您如何为三人聚智-Python 程序管理工具开发自定义插件。

9.1 插件系统概述

插件系统基于标准的目录结构和配置文件,支持以下特性:

  • 自动插件发现和加载

  • 标准化的配置管理

  • 依赖包自动安装

  • 统一的界面风格

  • 日志和错误处理

9.2 插件目录结构

每个插件都应该放在resources/app/software/目录下的独立文件夹中:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

software/ ├── your_plugin_name/ │   ├── settings.json          # 插件配置文件(必需) │   ├── your_plugin.py         # 主程序文件 │   ├── logo.ico              # 插件图标文件(可选) │   ├── requirements.txt       # 依赖包列表(可选) │   ├── plugin_config.json     # 插件运行时配置(可选) │   └── other_files...# 其他资源文件

9.3 配置文件说明 settings.json(必需)

这是插件的元数据配置文件,系统通过此文件识别和加载插件:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

{ "name":"插件显示名称", "description":"插件功能描述\n\n支持多行描述\n可以包含使用说明", "main_file":"main_program.py", "version":"1.0.0", "author":"开发者姓名", "category":"插件分类" }

字段说明:

  • name: 在界面中显示的插件名称
  • description: 插件的详细描述,支持换行符
  • main_file: 主程序文件名(相对于插件目录)
  • version: 插件版本号
  • author: 开发者信息
  • category: 插件分类(如:下载工具、量化交易、系统工具等)
requirements.txt(可选)

列出插件需要的 Python 包依赖:


  • 1

  • 2

  • 3

  • 4

# 插件依赖包列表 requests>=2.25.0 pandas>=1.3.0 numpy>=1.21.0

系统会在运行插件前自动安装这些依赖包。

logo.ico(可选)

插件的自定义图标文件:

  • 文件名: 必须命名为logo.ico
  • 格式: ICO 格式图标文件
  • 尺寸: 建议使用 32x32 或 48x48 像素
  • 位置: 放在插件根目录下
  • 作用: 在主界面程序列表中显示为插件图标

图标设计建议:

  • 使用简洁明了的设计,便于识别

  • 选择与插件功能相关的图形元素

  • 确保在小尺寸下仍然清晰可见

  • 使用适当的颜色对比度

图标制作方法:

  1. 在线工具: 使用 favicon.io、convertio.co 等在线转换工具
  2. 图像编辑软件: 使用 Photoshop、GIMP 等软件导出为 ICO 格式
  3. 命令行工具: 使用 ImageMagick 等工具进行格式转换

示例转换命令(ImageMagick):


  • 1

  • 2

# 将PNG图片转换为ICO格式 magick convert logo.png -resize 32x32 logo.ico

图标文件要求:

  • 文件大小建议不超过 50KB

  • 支持透明背景

  • 建议包含多个尺寸(16x16, 32x32, 48x48)

如果不提供logo.ico文件,系统将使用默认图标显示插件。插件模板目录中包含了一个示例图标文件供参考。

9.4 插件开发规范 9.4.1 基本结构

插件主程序应该遵循以下基本结构:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

# -*- coding: utf-8 -*- """ 插件名称 作者: 开发者姓名 版本: 1.0.0 描述: 插件功能描述 """ import tkinter as tk from tkinter import ttk, messagebox import json import os classYourPlugin: """插件主类""" def__init__(self, root): """初始化插件"""         self.root = root         self.root.title("插件名称")         self.root.geometry("800x600") # 加载配置         self.config = self.load_config() # 创建界面         self.create_widgets() defload_config(self): """加载插件配置""" # 配置文件加载逻辑 pass defcreate_widgets(self): """创建界面组件""" # 界面创建逻辑 pass defmain(): """主函数 - 插件入口点""" try:         root = tk.Tk()         app = YourPlugin(root)         root.mainloop() except Exception as e: print(f"插件运行出错: {e}")         messagebox.showerror("错误", f"插件运行出错: {e}") if __name__ == "__main__":     main()

9.4.2 界面设计建议
  1. 使用 Tkinter: 推荐使用 Tkinter 作为 GUI 框架,确保兼容性
  2. 响应式布局: 使用 grid 或 pack 布局管理器创建响应式界面
  3. 统一风格: 使用 ttk 组件保持界面风格一致
  4. 错误处理: 添加适当的异常处理和用户提示
9.4.3 配置管理

插件应该支持配置文件管理:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

defload_config(self): """加载配置文件"""     config_path = "plugin_config.json"     default_config = { "setting1": "default_value1", "setting2": "default_value2"     } try: if os.path.exists(config_path): withopen(config_path, 'r', encoding='utf-8') as f:                 config = json.load(f) # 合并默认配置 for key, value in default_config.items(): if key notin config:                     config[key] = value return config else:             self.save_config(default_config) return default_config except Exception as e:         messagebox.showerror("错误", f"加载配置失败: {e}") return default_config defsave_config(self, config=None): """保存配置文件""" if config isNone:         config = self.config try: withopen("plugin_config.json", 'w', encoding='utf-8') as f:             json.dump(config, f, ensure_ascii=False, indent=4) except Exception as e:         messagebox.showerror("错误", f"保存配置失败: {e}")

9.5 插件开发模板

系统提供了一个完整的插件开发模板,位于:
resources/app/software/plugin_template/

该模板包含:

  • 完整的插件结构示例

  • 标准的配置文件管理

  • 界面组件创建示例

  • 错误处理机制

  • 日志输出功能

您可以复制此模板作为新插件的起点。

9.6 插件测试和调试 9.6.1 本地测试

  1. 将插件文件夹放入resources/app/software/目录

  2. 重启应用程序

  3. 在主界面中找到您的插件并运行

9.6.2 调试技巧
  1. 控制台输出: 使用print()输出调试信息
  2. 日志记录: 在界面中添加日志输出区域
  3. 异常处理: 使用 try-catch 捕获和显示错误
  4. 配置验证: 确保配置文件格式正确
9.7 插件发布和分享 9.7.1 打包插件
  1. 确保所有必要文件都在插件目录中

  2. 测试插件在不同环境下的运行情况

  3. 编写详细的使用说明

9.7.2 分享插件
  • 可以将插件目录打包为 ZIP 文件分享

  • 其他用户只需解压到software/目录即可使用

  • 建议在 GitHub 等平台分享插件代码

9.8 常见问题和解决方案 Q: 插件无法在主界面显示?

A: 检查settings.json文件格式是否正确,确保main_file字段指向正确的文件。

Q: 依赖包安装失败?

A: 检查requirements.txt文件格式,确保包名和版本号正确。

Q: 插件运行时出现编码错误?

A: 确保所有 Python 文件都使用 UTF-8 编码,并在文件开头添加编码声明。

Q: 如何访问插件的工作目录?

A: 插件运行时的工作目录就是插件所在的文件夹,可以直接使用相对路径访问资源文件。

Q: 插件图标不显示或显示为默认图标?

A: 检查以下几点:

  1. 确保图标文件命名为logo.ico(区分大小写)

  2. 确保图标文件格式为标准的 ICO 格式

  3. 重启应用程序以刷新图标缓存

  4. 检查图标文件是否损坏,可以尝试重新制作

Q: 如何制作高质量的插件图标?

A: 建议步骤:

  1. 设计 48x48 像素的原始图标

  2. 确保图标在小尺寸下仍然清晰

  3. 使用在线工具或专业软件转换为 ICO 格式

  4. 测试图标在不同背景下的显示效果

9.9 高级功能 9.9.1 加密插件

系统支持加密的.enc文件,可以保护插件源代码。

9.9.2 多文件插件

插件可以包含多个 Python 文件,通过 import 语句相互调用。

9.9.3 资源文件管理

插件可以包含图片、数据文件等资源,放在插件目录中即可访问。

常见资源文件类型:

  • logo.ico: 插件图标文件,用于在主界面显示
  • 数据文件: CSV、JSON、XML 等数据文件
  • 配置模板: 默认配置文件模板
  • 帮助文档: README、使用说明等文档
  • 其他图片: PNG、JPG 等图片资源

资源文件访问示例:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

import os from pathlib import Path # 获取插件目录路径 plugin_dir = Path(__file__).parent # 访问资源文件 icon_path = plugin_dir / "logo.ico" data_path = plugin_dir / "data" / "sample.csv" config_template = plugin_dir / "default_config.json" # 检查文件是否存在 if icon_path.exists(): print(f"图标文件存在: {icon_path}")

10. 插件集成和配置详解 10.1 插件自动发现机制

系统启动时会自动扫描resources/app/software/目录下的所有子目录和文件:

  1. 目录扫描: 系统会遍历 software 目录下的所有子文件夹
  2. 配置检测: 检查每个文件夹中是否存在settings.json文件
  3. 插件注册: 根据配置文件信息将插件注册到系统中
  4. 界面显示: 在主界面的程序列表中显示可用插件
10.2 插件加载流程

当用户点击运行插件时,系统执行以下步骤:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

1. 读取插件配置 (settings.json) 2. 检查依赖包 (requirements.txt) 3. 安装缺失的依赖包 4. 创建独立的Python进程 5. 设置工作目录为插件目录 6. 执行主程序文件 7. 监控进程状态和输出

10.3 依赖包管理 10.3.1 自动安装机制

系统会在运行插件前自动检查和安装依赖包:


  • 1

  • 2

  • 3

  • 4

  • 5

# requirements.txt 示例 requests>=2.25.0# 指定最低版本 pandas==1.3.5# 指定确切版本 numpy                      # 使用最新版本 matplotlib>=3.0.0,<4.0.0# 版本范围限制

10.3.2 依赖包安装位置
  • 依赖包安装在系统的 Python 环境中

  • 所有插件共享相同的依赖包环境

  • 建议使用兼容的包版本避免冲突

10.3.3 常用依赖包推荐
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

# 界面开发 tkinter                    # 内置GUI库(推荐) pillow>=8.0.0             # 图像处理 # 数据处理 pandas>=1.3.0             # 数据分析 numpy>=1.21.0             # 数值计算 openpyxl>=3.0.0           # Excel文件处理 # 网络请求 requests>=2.25.0          # HTTP请求 urllib3>=1.26.0           # URL处理 # 文件处理 pathlib                   # 路径处理(内置) json                      # JSON处理(内置) configparser              # 配置文件处理(内置)

10.4 插件配置管理最佳实践 10.4.1 配置文件结构

建议使用分层的配置文件结构:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

plugin_directory/ ├── settings.json          # 插件元数据(系统读取) ├── config.json           # 用户配置(插件读取) ├── default_config.json   # 默认配置模板 └── user_data/            # 用户数据目录     ├── logs/             # 日志文件     ├── cache/            # 缓存文件     └── exports/          # 导出文件

10.4.2 配置文件示例

settings.json(系统配置):


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

{ "name":"数据分析工具", "description":"强大的数据分析和可视化工具\n\n功能特性:\n- 支持多种数据格式\n- 实时图表生成\n- 数据导出功能", "main_file":"data_analyzer.py", "version":"2.1.0", "author":"开发者姓名", "category":"数据工具", "icon":"icon.png", "min_python_version":"3.7", "supported_os":["windows","linux","macos"] }

config.json(用户配置):


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

{ "ui_settings":{ "theme":"light", "window_size":"800x600", "auto_save":true }, "data_settings":{ "default_format":"xlsx", "max_rows":10000, "encoding":"utf-8" }, "export_settings":{ "default_path":"./exports/", "include_timestamp":true, "compression":false } }

10.4.3 配置管理代码示例
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

  • 51

  • 52

  • 53

  • 54

  • 55

  • 56

  • 57

  • 58

  • 59

  • 60

  • 61

  • 62

  • 63

  • 64

  • 65

  • 66

  • 67

  • 68

  • 69

  • 70

  • 71

  • 72

import json import os from pathlib import Path classConfigManager: """配置管理器""" def__init__(self, plugin_dir=None): """初始化配置管理器"""         self.plugin_dir = Path(plugin_dir) if plugin_dir else Path.cwd()         self.config_file = self.plugin_dir / "config.json"         self.default_config_file = self.plugin_dir / "default_config.json" defload_config(self): """加载配置文件""" # 加载默认配置         default_config = self.load_default_config() # 加载用户配置 if self.config_file.exists(): try: withopen(self.config_file, 'r', encoding='utf-8') as f:                     user_config = json.load(f) # 合并配置                 config = self.merge_config(default_config, user_config) except Exception as e: print(f"加载用户配置失败: {e}")                 config = default_config else:             config = default_config             self.save_config(config) return config defload_default_config(self): """加载默认配置""" if self.default_config_file.exists(): try: withopen(self.default_config_file, 'r', encoding='utf-8') as f: return json.load(f) except Exception as e: print(f"加载默认配置失败: {e}") # 返回硬编码的默认配置 return { "ui_settings": { "theme": "light", "window_size": "800x600"             }, "data_settings": { "default_format": "xlsx", "max_rows": 10000             }         } defsave_config(self, config): """保存配置文件""" try: withopen(self.config_file, 'w', encoding='utf-8') as f:                 json.dump(config, f, ensure_ascii=False, indent=4) except Exception as e: print(f"保存配置失败: {e}") defmerge_config(self, default, user): """合并配置"""         result = default.copy() for key, value in user.items(): if key in result andisinstance(result[key], dict) andisinstance(value, dict):                 result[key] = self.merge_config(result[key], value) else:                 result[key] = value return result

10.5 插件生命周期管理 10.5.1 插件状态

系统跟踪每个插件的运行状态:

  • 未运行: 插件已加载但未启动
  • 运行中: 插件正在执行
  • 已停止: 插件执行完成或被用户停止
  • 错误: 插件运行时发生错误
10.5.2 进程管理
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

// 软件管理器中的进程管理(参考) classSoftwareManager { constructor() { this.runningProcesses = newMap(); // 存储运行中的进程     } // 启动插件 asyncrunSoftware(softwarePath, softwareName) { // 创建Python进程 // 设置工作目录 // 监控输出和错误 // 注册进程到管理器     } // 停止插件 stopSoftware(softwareName) { // 查找进程 // 发送终止信号 // 清理资源     } }

10.6 插件调试和日志 10.6.1 日志记录最佳实践
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

import logging import os from datetime import datetime classPluginLogger: """插件日志管理器""" def__init__(self, plugin_name, log_dir="logs"): """初始化日志器"""         self.plugin_name = plugin_name         self.log_dir = log_dir # 创建日志目录         os.makedirs(log_dir, exist_ok=True) # 配置日志器         self.logger = logging.getLogger(plugin_name)         self.logger.setLevel(logging.DEBUG) # 创建文件处理器         log_file = os.path.join(log_dir, f"{plugin_name}_{datetime.now().strftime('%Y%m%d')}.log")         file_handler = logging.FileHandler(log_file, encoding='utf-8')         file_handler.setLevel(logging.DEBUG) # 创建控制台处理器         console_handler = logging.StreamHandler()         console_handler.setLevel(logging.INFO) # 设置格式         formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s'         )         file_handler.setFormatter(formatter)         console_handler.setFormatter(formatter) # 添加处理器         self.logger.addHandler(file_handler)         self.logger.addHandler(console_handler) definfo(self, message): """记录信息日志"""         self.logger.info(message) deferror(self, message): """记录错误日志"""         self.logger.error(message) defdebug(self, message): """记录调试日志"""         self.logger.debug(message)

10.6.2 错误处理和用户反馈
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

defsafe_execute(func, error_message="操作失败"): """安全执行函数,捕获异常并显示用户友好的错误信息""" try: return func() except FileNotFoundError as e:         messagebox.showerror("文件错误", f"找不到文件: {e}")         logger.error(f"文件未找到: {e}") except PermissionError as e:         messagebox.showerror("权限错误", f"没有访问权限: {e}")         logger.error(f"权限错误: {e}") except json.JSONDecodeError as e:         messagebox.showerror("配置错误", f"配置文件格式错误: {e}")         logger.error(f"JSON解析错误: {e}") except Exception as e:         messagebox.showerror("错误", f"{error_message}: {e}")         logger.error(f"未知错误: {e}") returnNone

10.7 插件性能优化 10.7.1 启动优化
  • 延迟加载非必需模块

  • 使用配置缓存

  • 优化界面初始化

10.7.2 内存管理
  • 及时释放大对象

  • 使用生成器处理大数据

  • 避免内存泄漏

10.7.3 响应性优化
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

import threading from tkinter import ttk classResponsivePlugin: """响应式插件示例""" def__init__(self, root):         self.root = root         self.progress_var = tk.StringVar()         self.create_widgets() defcreate_widgets(self): """创建界面""" # 进度条         self.progress = ttk.Progressbar(             self.root,              mode='indeterminate'         )         self.progress.pack(pady=10) # 状态标签         self.status_label = ttk.Label(             self.root,              textvariable=self.progress_var         )         self.status_label.pack() deflong_running_task(self): """长时间运行的任务""" deftask():             self.progress.start()             self.progress_var.set("正在处理...") try: # 执行耗时操作                 self.do_heavy_work()                 self.progress_var.set("完成") except Exception as e:                 self.progress_var.set(f"错误: {e}") finally:                 self.progress.stop() # 在后台线程中执行         threading.Thread(target=task, daemon=True).start()

10.8 插件安全考虑 10.8.1 文件访问安全
  • 限制文件访问范围

  • 验证文件路径

  • 避免执行外部命令

10.8.2 网络安全
  • 验证 URL 和证书

  • 处理网络超时

  • 保护敏感信息

10.8.3 用户输入验证
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

defvalidate_input(value, input_type="string", max_length=None, allowed_chars=None): """输入验证函数""" if input_type == "string": if max_length andlen(value) > max_length: raise ValueError(f"输入长度不能超过{max_length}字符") if allowed_chars andnotall(c in allowed_chars for c in value): raise ValueError("包含非法字符") elif input_type == "number": try: float(value) except ValueError: raise ValueError("必须输入数字") returnTrue

其他应用程序正创建中,可关注右上方"程序小店",获取更多可视化 python 应用程序。

  • GitHub Issues: https://github.com/yuhanbo758/yuhanbopy-app/issues

11.版权信息

版权所有 © 2025 余汉波
基于 MIT 许可证发布

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
俄罗斯和哈马斯都玩脱了

俄罗斯和哈马斯都玩脱了

海子侃生活
2025-09-17 10:10:09
白天陪玩晚上陪睡?明码标价8000一次!高端伴游沦为色情交易温床

白天陪玩晚上陪睡?明码标价8000一次!高端伴游沦为色情交易温床

阿纂看事
2025-08-29 15:46:57
1966年,距今千年的六祖慧能肉身被剖,五脏六腑被扔,游街示众

1966年,距今千年的六祖慧能肉身被剖,五脏六腑被扔,游街示众

牛牛叨史
2025-09-11 22:06:15
吓死!事发昆明一小区,夫妻二人旅游回家,一开门就看到客厅爬满蛇

吓死!事发昆明一小区,夫妻二人旅游回家,一开门就看到客厅爬满蛇

生活魔术专家
2025-09-18 10:20:37
同志加兄弟:京族三岛归中国,白龙尾岛归越南,谁获利更大?

同志加兄弟:京族三岛归中国,白龙尾岛归越南,谁获利更大?

牛马搞笑
2025-09-11 05:39:28
通过这12个细节,网友们对人口问题有个基本的预估了

通过这12个细节,网友们对人口问题有个基本的预估了

清晖有墨
2025-09-17 16:59:17
世界、美国历史将证明查理•柯克的伟大

世界、美国历史将证明查理•柯克的伟大

大国老记
2025-09-19 13:02:28
重大发现!安徽新探明7.6亿吨煤炭资源

重大发现!安徽新探明7.6亿吨煤炭资源

安徽发布
2025-09-19 14:30:54
马雷斯卡:我爸当了50年渔民,每天凌晨2点-10点工作,这才是艰难

马雷斯卡:我爸当了50年渔民,每天凌晨2点-10点工作,这才是艰难

直播吧
2025-09-19 19:55:06
茅台批发价大面积“跳水” ! 零售价已低至1700元/瓶

茅台批发价大面积“跳水” ! 零售价已低至1700元/瓶

投资快报
2025-09-19 16:23:28
中超争议判罚!河南2球失而复得,VAR介入,媒体人:边裁载入史册

中超争议判罚!河南2球失而复得,VAR介入,媒体人:边裁载入史册

奥拜尔
2025-09-19 20:22:19
超强秋台风将生成!中到大雨,影响江苏!

超强秋台风将生成!中到大雨,影响江苏!

江南晚报
2025-09-19 02:00:53
女护士处理男患者隐私部位,会感觉难为情吗?美女护士说出大实话

女护士处理男患者隐私部位,会感觉难为情吗?美女护士说出大实话

第7情感
2025-09-17 12:12:15
回顾:一等功臣祁发宝,荣升副司令首次出镜,六排勋表属实罕见

回顾:一等功臣祁发宝,荣升副司令首次出镜,六排勋表属实罕见

健身狂人
2025-09-18 14:03:13
直击长春航空展:“红鹰”飞行表演队空中“比心”

直击长春航空展:“红鹰”飞行表演队空中“比心”

新京报
2025-09-19 21:25:04
蒯曼妹妹满分作文竟是写“姐姐输给了孙颖莎”,老师的评语很感人

蒯曼妹妹满分作文竟是写“姐姐输给了孙颖莎”,老师的评语很感人

十点街球体育
2025-09-19 21:58:28
关于人口数据这事,网友们提供了一系列的细节

关于人口数据这事,网友们提供了一系列的细节

清晖有墨
2025-09-02 12:21:41
美联储降息后,真正凶险的考验来了!中国必须稳住!

美联储降息后,真正凶险的考验来了!中国必须稳住!

李荣茂
2025-09-19 19:03:50
章若楠脚丫白白嫩嫩

章若楠脚丫白白嫩嫩

小椰的奶奶
2025-09-19 10:55:56
图书馆事件迎来大结局!杨景媛放已忏悔,她可能会放弃二审

图书馆事件迎来大结局!杨景媛放已忏悔,她可能会放弃二审

平老师666
2025-09-19 12:21:17
2025-09-19 23:16:49
余汉波 incentive-icons
余汉波
三人行,我们是财经的搬运工
1960文章数 2561关注度
往期回顾 全部

科技要闻

直击iPhone 17开售:消费者偏爱银色橙色

头条要闻

女教师在闺蜜群聊"八卦"被认定诽谤遭行拘 当事人发声

头条要闻

女教师在闺蜜群聊"八卦"被认定诽谤遭行拘 当事人发声

体育要闻

从轮椅到铜牌 他熬了7年:下个目标唱国歌!

娱乐要闻

全智贤被全面抵制!相关代言评论区沦陷

财经要闻

684亿大牛股,把孕妇逼到胎停?

汽车要闻

对话周光:一个技术理想主义者的“蜕变”

态度原创

房产
亲子
旅游
健康
军事航空

房产要闻

全民撑广州,不止于赛场!与“有态度”者共筑城市骄傲

亲子要闻

怀孕还不到100斤!方媛的惊人孕期状态

旅游要闻

热闻|清明假期将至,热门目的地有哪些?

内分泌科专家破解身高八大谣言

军事要闻

卫星图像显示以军坦克集结加沙城周围

无障碍浏览 进入关怀版