使用 Python 和 PySimpleGUI 开发桌面自动化办公脚本
1. PySimpleGUI 简介与安装
PySimpleGUI 是一个基于 Python 的图形用户界面(GUI)库,旨在简化 GUI 编程。它支持多种后端(如 Tkinter, Qt, WxPython),但 API 统一且简洁,非常适合快速开发桌面小工具、自动化脚本和管理面板。
PySimpleGUI 是 Python 的轻量级 GUI 库,适用于快速开发桌面工具。本文涵盖安装配置、两种界面模式(单次与持久)、常用弹窗函数(消息、输入、文件选择)、进度条展示以及事件循环机制。通过实战案例演示了如何编写一个具备文件夹选择、文件压缩及体积统计功能的自动化脚本,并补充了异常处理、路径兼容性及性能优化等最佳实践,帮助开发者构建完整的桌面应用程序。

PySimpleGUI 是一个基于 Python 的图形用户界面(GUI)库,旨在简化 GUI 编程。它支持多种后端(如 Tkinter, Qt, WxPython),但 API 统一且简洁,非常适合快速开发桌面小工具、自动化脚本和管理面板。
在命令行或终端中执行以下命令进行安装:
pip install pysimplegui
安装完成后,进入 Python 交互环境验证:
import PySimpleGUI as sg
print(sg.__version__)
若输出版本号则说明安装成功。
PySimpleGUI 主要提供两种窗口显示模式,适用于不同的业务场景。
类似于系统弹窗,出现一次后自动关闭或等待用户操作后退出程序。
窗口持续显示,除非用户手动关闭或程序主动退出。
PySimpleGUI 提供了丰富的内置弹窗函数,无需定义复杂布局即可快速展示信息。
使用 sg.popup() 及其变体可以快速展示文本。
import PySimpleGUI as sg
# 普通提示
sg.popup('注意!')
# OK 按钮
sg.popup_ok('默认弹窗')
# Yes/No 按钮
result = sg.popup_yes_no('是否保存?')
if result == 'Yes':
print('已保存')
# 错误提示
sg.popup_error('发生错误')
# 自动关闭
sg.popup_auto_close('即将关闭', auto_close=True, auto_close_duration=5)
可以通过参数调整颜色、宽度等样式。
sg.popup(
'这是弹窗内容',
title='Hello',
button_color=('#A81B0C', '#FFFFFF'),
background_color='#F47264',
line_width=2,
custom_text=' 好的 '
)
用于显示大量文本内容,支持滚动条。
text = '''大家好,
我们一起来学习 PySimpleGUI 制作简单的图形用户界面。
这里可以放置很长的日志信息或者帮助文档。'''
sg.popup_scrolled(text, title='帮助文档')
类似 input(),但通过 GUI 完成。
text1 = sg.popup_get_text('请输入文字 1')
print(f'输入内容:{text1}')
隐藏输入字符,适合敏感信息录入。
password = sg.popup_get_text('请输入密码', password_char='*')
print(f'密码长度:{len(password)}')
允许用户浏览并选择单个文件。
file_path = sg.popup_get_file(
'请选择要处理的文件',
file_types=(('Python 文件', '*.py'), ('所有文件', '*.*'))
)
if file_path:
print(f'选中文件:{file_path}')
结合 save_as 参数实现保存对话框。
save_path = sg.popup_get_file(
'请选择保存位置',
save_as=True,
default_extension='.txt',
file_types=(('文本文件', '.txt'),)
)
选择目录路径。
folder_path = sg.popup_get_folder('请选择目标文件夹')
if folder_path:
print(f'目标目录:{folder_path}')
对于耗时操作,使用进度条提升用户体验。
sg.one_line_progress_meter() 是最常用的进度条形式。
for i in range(1000):
sg.one_line_progress_meter(
'正在处理...',
i + 1,
1000,
key='progress_key',
orientation='h',
bar_color=('#F47264', '#FFFFFF')
)
orientation: 'h' (横向) 或 'v' (纵向)bar_color: 背景色和前景色元组key: 用于后续更新进度的标识符构建完整应用时,通常需要创建主窗口并监听用户事件。
布局由一系列元素(Element)组成,通常按行排列。
layout = [
[sg.Text('欢迎使用自动化工具')],
[sg.Input(key='-INPUT-')],
[sg.Button('提交'), sg.Button('取消')]
]
window = sg.Window('自动化脚本', layout)
使用 while True 循环监听事件,根据返回值决定流程。
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED or event == '取消':
break
if event == '提交':
user_input = values['-INPUT-']
sg.popup(f'收到输入:{user_input}')
window.close()
本章节将结合上述知识,编写一个完整的文件夹压缩工具。
import PySimpleGUI as sg
import zipfile
import os
def create_zip_tool():
# 1. 选择源文件夹
folder = sg.popup_get_folder('请选择要压缩的文件夹')
if not folder:
sg.popup('未选择文件夹,程序退出')
return
# 2. 选择压缩包保存位置
zip_path = sg.popup_get_file(
'请选择要保存的压缩包位置',
save_as=True,
default_extension='zip',
file_types=(('压缩包', '.zip'),)
)
if not zip_path:
sg.popup('未选择保存路径,程序退出')
return
# 3. 压缩过程
try:
with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipobj:
for root, dirs, files in os.walk(folder):
for file in files:
file_path = os.path.join(root, file)
arcname = os.path.relpath(file_path, folder)
zipobj.write(file_path, arcname)
# 4. 显示结果
zip_size = os.stat(zip_path).st_size // 1024
sg.popup(f'压缩成功!\n压缩包体积大小为:{zip_size} KB')
except Exception as e:
sg.popup_error(f'压缩失败:{str(e)}')
if __name__ == '__main__':
create_zip_tool()
os.walk 递归遍历子目录,确保所有文件被包含。os.path.relpath 避免解压时出现多余层级。try-except 块防止因权限问题导致程序崩溃。对于大文件压缩,建议在后台线程中执行,避免阻塞 UI 界面。可使用 threading 模块配合 sg.Thread 实现。
PySimpleGUI 在不同操作系统下表现一致,但需注意路径分隔符差异。建议使用 os.path.join 而非硬编码 / 或 \。
程序退出前务必调用 window.close() 释放系统资源,防止内存泄漏。
本文详细介绍了 PySimpleGUI 的基础用法,包括安装、弹窗交互、文件选择及进度条展示,并通过一个实用的压缩工具案例演示了如何将分散的功能整合为完整的应用程序。掌握这些技能后,开发者可以快速构建各类桌面辅助工具,提升办公效率。建议在实际项目中结合具体需求进一步探索高级组件和主题定制功能。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online