Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 160 additions & 0 deletions docs/python-office-windows-gui-website-article.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
# python-office Windows 图形界面版:让办公自动化更容易上手

## 写在前面

python-office 原本是一个非常实用的 Python 办公自动化项目,可以帮助用户处理 Word、Excel、PDF、文件批量操作等常见办公任务。对于熟悉 Python 或命令行的用户来说,直接通过 CLI 使用这些功能没有太大问题。

但在实际办公场景中,很多用户并不是程序员。他们可能只是想把 PDF 转成 Word,或者把几个 PDF 文件合并成一个文档。如果还需要先安装 Python、配置依赖、打开命令行、输入参数,对普通用户来说就有些复杂了。

所以我基于 python-office 做了一个 Windows 图形界面版本,并使用 Nuitka 打包成可离线运行的软件包。它的目标很明确:让不熟悉命令行的用户,也能像使用普通 Windows 软件一样使用 python-office 的常用功能。

## 为什么要做图形界面版

很多优秀的 Python 工具功能很强,但传播到普通用户那里时,常常会遇到一个问题:不是功能不好,而是使用门槛太高。

对于开发者来说,命令行很高效;但对普通办公用户来说,命令行意味着:

- 不知道从哪里打开
- 不知道命令怎么写
- 不知道参数填在哪里
- 路径中有空格或中文时容易出错
- 出错后不知道应该怎么排查

图形界面版就是为了解决这些问题。它把常用功能整理成可点击、可填写、可查看日志的界面,让用户可以通过选择文件、填写参数、点击运行来完成操作。

## 同事试用后的真实反馈

这个版本给同事试用后,反馈比较明显:最受欢迎的是 **PDF 转 Word** 和 **PDF 合并**。

这也很符合日常办公需求。很多人并不需要复杂的自动化流程,只是经常遇到这些具体问题:

- 收到 PDF 文件后,需要转成 Word 再编辑
- 多个 PDF 材料需要合并成一个完整文件
- 不想为了一个简单操作去下载各种小工具
- 不方便安装 Python 或配置环境
- 希望一个软件打开后就能直接处理文件

图形界面版把这些高频需求放到了更容易使用的位置,让普通用户也能快速完成操作。

## 主要功能亮点

### 1. PDF 转 Word 更方便

PDF 转 Word 是试用反馈中最受欢迎的功能之一。

过去如果通过命令行操作,用户需要知道具体命令、输入文件路径和输出路径。现在通过图形界面,可以直接选择 PDF 文件,填写或选择输出位置,然后点击运行。

这种方式更符合普通办公用户的习惯,也更适合临时处理文件。

### 2. PDF 合并更直观

PDF 合并也是非常常见的办公需求。比如把多个通知、合同、证明、扫描件合并成一个 PDF,方便发送、归档或打印。

图形界面版让用户不用写命令,只需要选择需要合并的文件,再执行合并操作即可。对于不熟悉命令行的人来说,这类改动能明显降低使用成本。

### 3. 解压即可运行

这个版本使用 Nuitka 目录模式打包,将运行所需依赖放在同一个文件夹中。

用户下载后只需要:

1. 解压软件包
2. 进入 `run.dist` 文件夹
3. 双击 `python-office-gui.exe`

不需要提前安装 Python,不需要手动安装依赖,也不需要联网配置环境。

### 4. 适合离线环境

很多办公场景并不一定能随时联网,比如内网电脑、教学机房、临时演示电脑,或者单位中不方便随意安装依赖的设备。

离线打包版本更适合这种环境。只要把完整文件夹复制过去,就可以运行软件。

### 5. 功能分类更清楚

新版界面把功能按类别整理到左侧栏中,用户可以按模块查找自己需要的工具。

相比在文档里寻找命令,图形界面的分类方式更直观。用户可以先看到有哪些功能,再决定使用哪一个。

### 6. 保留运行日志

软件界面中保留了运行日志区域。执行功能时,用户可以看到当前操作过程、成功提示或错误信息。

这对普通用户和开发者都很有帮助。如果运行失败,用户可以把日志截图发给维护者,排查问题会更方便。

### 7. 更统一的软件体验

为了让这个版本更像一个完整的软件产品,我也重新设计了界面配色、布局和 exe 图标。

新的界面更加清爽,功能区域更明确,整体风格也更统一。对于普通用户来说,视觉上的完整度会影响第一印象,也会影响他们是否愿意继续使用。

## 适合哪些人使用

这个图形界面版适合以下用户:

- 不熟悉命令行,但想使用 python-office 的用户
- 经常需要 PDF 转 Word 的办公用户
- 经常需要合并多个 PDF 的用户
- 想把办公自动化工具分享给同事或学生的人
- 需要在离线环境下运行办公工具的人
- 希望快速体验 python-office 功能的新手用户

它并不是要替代原来的 CLI,而是作为补充,让 python-office 可以覆盖更多使用场景。

CLI 适合开发者、批处理脚本和自动化集成;GUI 更适合普通用户、教学演示和低门槛分发。两种方式可以同时存在。

## 下载和使用

发布地址:

<https://github.com/YiLanTinYu/python4office.cn/releases/tag/python-office-gui-v2026.08.17>

由于软件包较大,目前采用分卷方式上传。使用步骤如下:

1. 下载所有分卷文件:
- `python-office-gui-windows-x64-2026.08.17.zip.part001`
- `python-office-gui-windows-x64-2026.08.17.zip.part002`
- `python-office-gui-windows-x64-2026.08.17.zip.part003`
- `python-office-gui-windows-x64-2026.08.17.zip.part004`
- `python-office-gui-windows-x64-2026.08.17.zip.part005`
2. 下载 `merge-parts.bat`
3. 把 5 个分卷和 `merge-parts.bat` 放在同一个文件夹
4. 双击 `merge-parts.bat`,合并出完整 zip
5. 解压 zip
6. 进入 `run.dist` 文件夹
7. 双击 `python-office-gui.exe`

合并后的 zip 校验值:

```text
SHA256: 22C39F818220B38F31C116CE072F844C9B84001F8F58A56B35D8EB30934A2C4E
```

## 这个版本的意义

我认为这个版本最大的意义,是把 python-office 的能力从“开发者可用”进一步推向“普通用户可用”。

很多办公自动化功能本身并不复杂,但如果只能通过命令行使用,就会挡住一部分真正需要它的人。图形界面版可以让这些功能更容易被看到、被理解、被使用。

尤其是 PDF 转 Word、PDF 合并这类高频办公需求,本身就非常适合做成图形界面工具。用户不需要关心背后的命令,只需要完成自己的办公任务。

## 后续计划

后续如果继续完善,可以考虑:

- 继续优化 PDF 相关功能体验
- 增加更多常用办公功能入口
- 优化大文件处理时的提示和进度显示
- 继续压缩打包体积
- 整理代码结构,方便提交到原项目
- 根据用户反馈调整界面和操作流程

## 总结

python-office Windows 图形界面版,是一次面向普通办公用户的尝试。

它保留了 python-office 的实用能力,同时通过图形界面、离线打包、使用教程和统一的软件设计,降低了使用门槛。

从同事试用反馈来看,PDF 转 Word 和 PDF 合并这类功能非常适合通过图形界面来推广。它们需求明确、使用频率高、普通用户容易理解,也更容易体现办公自动化工具的实际价值。

希望这个版本可以让更多人体验到 python-office 的便利,也让办公自动化工具离普通用户更近一点。
72 changes: 72 additions & 0 deletions gui/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# python-office Windows GUI

这是一个面向普通办公用户的 `python-office` 图形界面入口,基于 PySide6 构建。

它保留 CLI 的自动化能力,同时把常用功能整理成可点击、可填写、可查看日志的桌面窗口。对不熟悉命令行的用户来说,可以直接选择文件、填写参数并点击运行。

## 主要特点

- 左侧按模块展示功能,右侧按需生成参数表单
- 启动时默认折叠左侧分类,减少界面干扰
- 参数通过 `inspect.signature` 反射生成,并在打开功能页时懒加载
- 使用 `QThread` 执行业务函数,避免界面卡死
- 运行日志集中显示,方便截图和排错
- 对必须 CLI 交互的功能显示命令提示,不在 GUI 中直接执行
- 附带 Nuitka 目录模式打包脚本,方便生成离线运行版本

## 安装依赖

```bash
pip install PySide6
```

如需打包 Windows 离线版本,还需要安装 Nuitka:

```bash
pip install nuitka
```

## 启动方式

在项目根目录运行:

```bash
python -m gui
```

也可以使用:

```bash
python -m gui.run
```

## 打包方式

Windows PowerShell 中运行:

```powershell
.\scripts\build-gui-nuitka.ps1
```

脚本会使用 Nuitka 目录模式生成 `dist-nuitka/run.dist`,并复制运行所需依赖,方便离线使用。

## 目录结构

```text
gui/
├── __main__.py
├── app.py
├── run.py
├── main_window.py
├── panels.py
├── registry.py
├── styles.py
├── workers.py
├── assets/
├── widgets/
└── tests/
```

## 当前重点场景

试用反馈中,PDF 转 Word 和 PDF 合并是最受欢迎的功能。GUI 版本重点降低这些高频办公能力的使用门槛,让用户不用记命令,也不用提前配置复杂环境。
13 changes: 13 additions & 0 deletions gui/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# -*- coding: utf-8 -*-
"""python-office GUI 包。

启动方式(任选其一):
1. ``python -m gui.run``
2. ``python -m gui``
3. 安装后 ``python-office-gui``(在 pyproject.toml 中声明)

依赖:
pip install PySide6
"""

__version__ = "1.0.0"
9 changes: 9 additions & 0 deletions gui/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# -*- coding: utf-8 -*-
"""允许 ``python -m gui`` 直接启动。"""

import sys

from gui.app import main

if __name__ == "__main__":
sys.exit(main())
37 changes: 37 additions & 0 deletions gui/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
"""QApplication 工厂 + main window 装配。"""

from __future__ import annotations

import sys
from pathlib import Path
from typing import Optional

from PySide6.QtGui import QFont, QIcon
from PySide6.QtWidgets import QApplication

from gui.main_window import MainWindow
from gui.styles import apply_theme


def _app_icon_path() -> Path:
return Path(__file__).resolve().parent / "assets" / "python-office.ico"


def create_app(argv: Optional[list[str]] = None) -> QApplication:
app = QApplication.instance() or QApplication(argv or sys.argv)
app.setApplicationName("python-office")
app.setOrganizationName("python-office")
app.setFont(QFont("Segoe UI", 10))
icon_path = _app_icon_path()
if icon_path.exists():
app.setWindowIcon(QIcon(str(icon_path)))
apply_theme(app)
return app


def main() -> int:
app = create_app()
window = MainWindow()
window.show()
return app.exec()
Binary file added gui/assets/python-office-icon-source.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/assets/python-office-icon-source.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/assets/python-office-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/assets/python-office.ico
Binary file not shown.
Loading