python-toolbox

工具箱 (ToolBox)

Build and Deploy GitHub commit activity GitHub Issues GitHub Pull Requests GitHub Tag GitHub Release GitHub Repo stars GitHub forks Codacy Badge GitHub License

ToolBox

**离线 · 高效 · 美观** 的桌面工具集合 [功能特色](#功能特色) · [截图预览](#截图预览) · [快速开始](#快速开始) · [使用指南](#使用指南) · [插件开发](#插件开发) · [用户手册](/python-toolbox/%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C.html)

功能特色

图标 工具 说明
🗜️ 图片压缩 批量压缩 JPG/PNG/WebP,可调质量,支持格式互转
🔁 图片格式转换 批量转换 JPEG/PNG/WebP/BMP/TIFF/GIF 六种格式
🧩 图片拼接 多张图片横向或纵向拼成一张,支持对齐设置
🖨️ 图片转PDF 多张图片合并为一个 PDF,支持拖拽排序
🔍 图片缩放 批量调整尺寸,支持按比例/宽度/高度/指定宽高
📚 PDF合并 多个 PDF 合并为一个,支持拖拽调整顺序
📃 PDF拆分 拆分 PDF 为图片或单页 PDF,支持自定义页数
🔂 文件去重 按内容 Hash 查找重复文件,支持预览和批量删除

通用特性


截图预览

功能 截图
首页 首页
图片压缩 图片压缩
图片格式转换 图片格式转换
图片拼接 图片拼接
图片转PDF 图片转PDF
图片缩放 图片缩放
PDF合并 PDF合并
PDF拆分 PDF拆分
文件去重 文件去重
设置 设置

快速开始

1. 安装依赖

pip install -r requirements.txt

依赖包说明:

用途
PyQt6 GUI 框架
Pillow (PIL) 图片处理
img2pdf PDF 转换(首选)
PyMuPDF (fitz) PDF 转换(备选)

2. 运行程序

python main.py

3. 打包为 EXE(Windows)

# 推荐使用 spec 文件打包(已包含所有必要模块)
pyinstaller toolbox.spec

# 使用 UPX 压缩减小体积
pyinstaller --upx-dir=/path/to/upx toolbox.spec

⚠️ 注意:必须使用 toolbox.spec 进行打包,直接运行 pyinstaller main.py 会导致动态加载的插件模块缺失。


使用指南

图片压缩

  1. 点击左侧「图片压缩」
  2. 添加图片(支持多选和拖拽)
  3. 选择输出格式(保持原格式 / JPG / PNG / WebP)
  4. 调整压缩质量滑块(建议 70~85%)
  5. 点击「开始压缩」

图片格式转换

  1. 点击左侧「图片格式转换」
  2. 添加图片,选择目标格式(JPEG / PNG / WebP / BMP / TIFF / GIF)
  3. 调整转换质量
  4. 点击「开始转换」

图片拼接

  1. 点击左侧「图片拼接」
  2. 添加图片(至少 2 张),调整顺序
  3. 选择拼接方向:横向 / 纵向
  4. 设置输出图片质量
  5. 点击「开始拼接」

图片转PDF

  1. 点击左侧「图片转PDF」
  2. 添加图片(支持拖拽排序)
  3. 选择输出质量(高质量 / 标准 / 压缩)
  4. 选择输出文件路径
  5. 点击「开始转换」

图片缩放

  1. 点击左侧「图片缩放」
  2. 添加图片,选择缩放方式(百分比 / 宽度 / 高度 / 指定宽高)
  3. 设置缩放参数,勾选「保持宽高比」
  4. 点击「开始缩放」

PDF合并

  1. 点击左侧「PDF合并」
  2. 添加 PDF 文件(支持拖拽排序)
  3. 调整 PDF 顺序(上移 / 下移)
  4. 选择输出文件路径
  5. 点击「开始合并」

PDF拆分

  1. 点击左侧「PDF拆分」
  2. 添加一个 PDF 文件
  3. 选择输出格式(单页 PDF / 图片)
  4. 设置拆分页数(单页 PDF 模式)或图片格式(图片模式)
  5. 点击「开始拆分」

文件去重

  1. 点击左侧「文件去重」
  2. 选择要扫描的文件夹
  3. 选择去重规则(保留最新 / 保留最旧 / 手动选择)
  4. 点击「开始扫描」
  5. 查看重复文件组,勾选要删除的文件
  6. 点击「删除选中文件」并确认

插件开发

工具箱支持插件扩展,将 Python 文件放入 plugins/ 目录即可自动加载。

创建插件

新建 plugins/my_tool.py

# -*- encoding: utf-8 -*-
"""
我的工具插件
"""
from toolbox import ToolPlugin, Card, AnimatedButton, Theme
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QLabel

class MyTool(ToolPlugin):
    name = "我的工具"
    description = "工具描述"
    icon = "🔧"

    def create_ui(self) -> QWidget:
        """创建工具界面"""
        widget = QWidget()
        layout = QVBoxLayout(widget)
        layout.addWidget(QLabel("Hello, World!"))
        return widget

    def apply_theme(self, theme):
        """响应主题切换(可选)"""
        pass

插件配置

config.pyPLUGIN_MODULES 中添加配置:

{
    "name": "我的工具",
    "icon": "🔧",
    "description": "工具描述",
    "order": 30,  # 排序权重,越小越靠前
    "module": "plugins.my_tool",
    "class": "MyTool",
}

现有插件

文件 类名 功能
plugins/image_compressor.py ImageCompressor 图片压缩
plugins/image_format_converter.py FormatConverter 图片格式转换
plugins/image_stitcher.py ImageStitcher 图片拼接
plugins/image_to_pdf.py ImageToPDF 图片转 PDF
plugins/image_scaler.py ImageScaler 图片缩放
plugins/pdf_merger.py PDFMerger PDF 合并
plugins/pdf_splitter.py PDFSplitter PDF 拆分
plugins/file_deduplicator.py FileDeduplicator 文件去重

配置系统

应用配置集中在 config.py 文件中:

配置项 说明
APP_NAME, APP_VERSION 应用名称和版本号
APP_DESCRIPTION, APP_COPYRIGHT 应用描述和版权信息
APP_WEBSITE_URL 官方网站链接
PLUGIN_MODULES 插件列表(名称、图标、描述、排序)
UI_CONFIG 窗口大小、侧边栏宽度等 UI 设置
THEME_CONFIG 主题相关配置
WELCOME_CONFIG 欢迎页面文本内容

修改 config.py 即可自定义应用外观和信息,无需修改主程序代码。


打包发布

环境要求

打包步骤

# 1. 生成版本信息文件
python generate_version_info.py

# 2. 验证打包依赖
python verify_packaging.py

# 3. 打包为 EXE
pyinstaller toolbox.spec

打包后的 EXE 文件位于 dist/ 目录下。


TODO

已完成 ✅

计划中 🔨

待优化功能

暂无


欢迎提交 PR 贡献新插件或功能!


许可证

本项目为开源项目,使用MIT协议,欢迎自由使用和贡献。

Star History

Star History Chart

Visitors

Flag Counter


**工具箱** — 让文件处理更简单 🚀