使用 Tkinter (Python 内置)
这是 Python 自带的 GUI 库,无需额外安装,是入门最快、最简单的方式。

-
简介:Tkinter 是 Python 的标准 GUI 工具包,它封装了 Tcl/Tk 图形库,提供了各种控件(如按钮、标签、输入框、菜单等)来构建桌面应用。
-
优点:
- 开箱即用:随 Python 一起安装,无需
pip。 - 跨平台:同样的代码在 Windows、macOS 和 Linux 上都能运行。
- 文档丰富:作为标准库,有大量的教程和社区支持。
- 轻量级:程序本身很小,资源占用少。
- 开箱即用:随 Python 一起安装,无需
-
缺点:
- 界面老旧:默认外观比较朴素,难以实现现代化的、美观的界面。
- 自定义程度低:很难对控件的外观和行为进行深度定制。
- 性能一般:对于复杂的动画或大量数据刷新,性能可能不是最优。
-
适用场景:
(图片来源网络,侵删)- 内部工具、脚本 GUI 化。
- 简单的配置程序。
- 学习 GUI 编程的入门项目。
-
简单示例:
import tkinter as tk from tkinter import messagebox def show_message(): messagebox.showinfo("提示", "你好,Tkinter!") # 创建主窗口 root = tk.Tk() root.title("我的第一个 Tkinter 程序") root.geometry("300x200") # 设置窗口大小 # 添加一个标签 label = tk.Label(root, text="欢迎使用 Tkinter", font=("Arial", 14)) label.pack(pady=20) # pady 上下边距 # 添加一个按钮 button = tk.Button(root, text="点击我", command=show_message) button.pack(pady=10) # 运行主循环 root.mainloop()
使用 PyQt6 / PySide6 (现代、功能强大)
这是目前最流行、功能最强大的 Python GUI 框架之一,它们是 Qt 库的 Python 绑定。
-
简介:Qt 是一个成熟的、功能全面的 C++ 框架,被广泛应用于各种桌面和移动应用,PyQt6 和 PySide6 是它的官方或社区支持的 Python 版本,PySide6 是官方推荐的,拥有更友好的许可证(LGPL)。
-
优点:
(图片来源网络,侵删)- 界面美观:可以轻松创建现代化、专业的用户界面。
- 功能强大:提供几乎你能想到的所有控件和高级功能(如多线程、数据库、网络、绘图、3D 等)。
- 高度可定制:对控件的样式(使用 QSS,类似 CSS)和行为有极高的控制力。
- 优秀的布局系统:可以方便地设计响应式、自适应的界面。
-
缺点:
- 学习曲线陡峭:API 相对复杂,概念较多(信号与槽、布局管理器等),需要投入更多时间学习。
- 需要安装:需要使用
pip安装PyQt6或PySide6。 - 文件较大:打包后的程序体积会比 Tkinter 大很多,因为它包含了 Qt 的核心库。
-
适用场景:
- 功能复杂的桌面应用程序。
- 对界面美观度要求高的软件。
- 需要 MDI(多文档界面)、复杂表格、图表等专业组件的应用。
-
简单示例 (PySide6):
import sys from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel # 创建一个自定义的窗口类 class MyWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("PySide6 程序") self.setGeometry(100, 100, 300, 200) # 创建控件 self.label = QLabel("欢迎使用 PySide6") self.button = QPushButton("点击我") # 连接信号和槽 self.button.clicked.connect(self.on_button_clicked) # 设置布局 layout = QVBoxLayout() layout.addWidget(self.label) layout.addWidget(self.button) self.setLayout(layout) def on_button_clicked(self): self.label.setText("按钮被点击了!") # 程序入口 if __name__ == "__main__": app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec())
使用 Dear PyGui (极简、高性能)
这是一个非常现代的 GUI 库,以其极简的 API 和出色的性能著称。
-
简介:Dear PyGui (DPG) 使用 C++ 进行渲染,通过 Python 绑定提供接口,它基于 Immediate Mode(立即模式)GUI 设计理念。
-
优点:
- 性能极高:特别适合需要频繁刷新数据、绘制图表、3D 渲染的应用。
- API 极简:学习成本非常低,几行代码就能创建一个界面。
- 数据绑定:内置了强大的数据绑定系统,可以轻松将数据与 UI 同步。
-
缺点:
- 立即模式:它的设计理念与传统“保留模式”的 GUI(如 Tkinter, PyQt)不同,需要一些时间适应。
- 定制性有限:虽然性能好,但在实现极其复杂的自定义动画或布局时,不如 PyQt 灵活。
- 社区相对较小:虽然增长迅速,但社区规模和资源不如 PyQt。
-
适用场景:
- 数据可视化工具。
- 实时监控面板。
- 需要高性能计算并展示结果的应用。
- 快速原型制作。
-
简单示例:
import dearpygui.dearpygui as dpg dpg.create_context() with dpg.window(label="Dear PyGui 示例", width=400, height=300): dpg.add_text("欢迎使用 Dear PyGui!") dpg.add_button(label="点击我", callback=lambda: dpg.set_value("text_id", "你好,Dear PyGui!")) dpg.add_text("等待点击...", tag="text_id") dpg.create_viewport(title='自定义窗口', width=800, height=600) dpg.setup_dearpygui() dpg.show_viewport() dpg.start_dearpygui() dpg.destroy_context()
使用 Web 技术 (Electron + PyScripter)
这是一种混合方案,利用 Web 技术来构建桌面应用,然后用 Python 作为后端逻辑。
- 简介:
- 前端:使用 HTML, CSS, JavaScript 构建用户界面,你可以使用任何现代前端框架(如 React, Vue, Svelte)。
- 桥接:使用一个 Python Web 服务器(如 Flask, FastAPI)来提供 API。
- 桌面化:使用 Electron 这样的框架,将你的 Web 应用打包成一个原生的桌面程序,Electron 本质上是打包了 Chromium 浏览器和 Node.js 运行时。
- Python 集成:为了让 Electron 能直接运行 Python 代码,可以使用
Pyodide或PyScripter等技术,将 Python 解释器嵌入到 Web 页面中。
- 优点:
- 界面开发体验好:可以利用庞大的 Web 生态和开发者社区,轻松实现美观、复杂的界面。
- 跨平台:一次开发,多端部署(Windows, macOS, Linux)。
- 技术栈统一:如果团队熟悉 Web 开发,上手非常快。
- 缺点:
- 资源占用高:程序本质上是一个完整的浏览器,内存和 CPU 占用通常远高于原生 GUI 程序。
- 架构复杂:需要同时管理前端、后端和桌面打包三部分,增加了复杂性。
- 启动速度慢:相比原生应用,启动时间通常更长。
- 适用场景:
- 对界面要求极高,且希望复用 Web 开发技能的项目。
- 需要跨平台,且不介意程序体积和资源占用的应用。
- 将现有的 Web 应用快速打包成桌面版。
使用 GUI 框架 + 打包工具
写好程序后,你需要将它打包成一个 .exe 文件,方便在没有安装 Python 环境的电脑上运行。
-
常用打包工具:
- PyInstaller: 最流行、最易用的打包工具之一,它可以将你的 Python 脚本及其所有依赖项打包成一个独立的
.exe文件。 - Nuitka: 一个将 Python 代码编译成 C 代码的工具,然后再编译成可执行文件,理论上可以获得更好的性能,但配置和使用比 PyInstaller 复杂。
- cx_Freeze: 另一个历史悠久的打包工具,功能也比较强大。
- PyInstaller: 最流行、最易用的打包工具之一,它可以将你的 Python 脚本及其所有依赖项打包成一个独立的
-
PyInstaller 使用示例: 假设你有一个名为
my_app.py的 PyQt6 程序。-
安装 PyInstaller:
pip install pyinstaller -
打包命令:
# 基本打包,生成一个文件夹 pyinstaller my_app.py # 打包成单个 .exe 文件 pyinstaller -F my_app.py # 打包时不显示控制台窗口(适用于 GUI 程序) pyinstaller -F -w my_app.py
打包完成后,你可以在
dist目录下找到生成的.exe文件。
-
总结与选择建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Tkinter | 简单、内置、跨平台 | 界面老旧、定制性差 | 入门学习、简单工具、脚本GUI化 |
| PyQt6/PySide6 | 功能强大、界面美观、高度可定制 | 学习曲线陡峭、文件体积大 | 专业级应用、复杂软件、对界面有要求的项目 |
| Dear PyGui | 性能极高、API极简 | 立即模式、定制性有限 | 数据可视化、实时监控、高性能计算应用 |
| Web技术 | 界面开发体验好、跨平台 | 资源占用高、架构复杂 | 利用Web技术栈、追求现代化界面、快速跨平台 |
如何选择?
- 如果你是初学者,只想给脚本加个简单的界面:从 Tkinter 开始,它最简单直接。
- 如果你想开发一个功能完善、外观专业的商业软件:PySide6 是你的不二之选,是目前工业界的标准。
- 如果你的程序需要处理大量数据、实时图表,对性能要求苛刻:可以尝试 Dear PyGui,它可能会给你带来惊喜。
- 如果你是 Web 开发者,或者你的应用核心是复杂的 Web 界面:可以考虑 Electron + PyScripter 的混合方案。
对于大多数 Windows 程序开发需求,PySide6 是目前最主流、最均衡、也是最被推荐的选择。
