在 Python 桌面应用开发领域,GUI(图形用户界面)框架是核心工具,其中Tkinter作为 Python 内置标准库,轻量简洁、开箱即用;PyQt5作为成熟的商业级框架,功能强大、界面美观,是开发者最常用的两大选择。
本文将通过完整可运行的源码实例,分别讲解 Tkinter 和 PyQt5 的基础开发流程,实现一个功能完整的桌面小工具,帮助新手快速上手 Python GUI 开发,无需复杂配置,直接复制源码即可运行。
一、Python GUI 框架选型对比
在开发前,我们先简单对比两大框架的核心特点,方便根据需求选择:
- Tkinter
- 优点:Python 内置,无需额外安装,学习成本极低,适合小型工具、快速原型开发;
- 缺点:组件样式原生,高级功能有限,复杂界面开发效率较低。
- PyQt5
- 优点:组件丰富、支持自定义样式、跨平台兼容性强,适合中大型桌面应用;
- 缺点:需要额外安装库,学习曲线略高于 Tkinter。
二、Tkinter 实战:简易计算器桌面应用
Tkinter 是 Python 自带的 GUI 库,安装 Python 后直接可用,无需额外配置。我们以简易计算器为例,实现基础的加减乘除运算功能。
1. 完整源码
python
运行
# 导入Tkinter库
import tkinter as tk
from tkinter import messagebox
# 定义计算器核心类
class Calculator:
def __init__(self, root):
self.root = root
self.root.title("Tkinter简易计算器") # 窗口标题
self.root.geometry("300x400") # 窗口大小
# 定义输入框:显示计算内容
self.entry = tk.Entry(root, font=("Arial", 20), justify=tk.RIGHT)
self.entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10, ipadx=8, ipady=8)
# 按钮文本布局
buttons = [
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"0", "C", "=", "+"
]
# 动态生成按钮
row_val = 1
col_val = 0
for text in buttons:
# 创建按钮,绑定点击事件
btn = tk.Button(root, text=text, font=("Arial", 16),
command=lambda t=text: self.on_button_click(t))
btn.grid(row=row_val, column=col_val, padx=5, pady=5, ipadx=10, ipady=10)
col_val += 1
if col_val > 3:
col_val = 0
row_val += 1
# 按钮点击事件处理
def on_button_click(self, text):
if text == "C":
# 清空输入框
self.entry.delete(0, tk.END)
elif text == "=":
try:
# 计算表达式结果
result = eval(self.entry.get())
self.entry.delete(0, tk.END)
self.entry.insert(tk.END, str(result))
except Exception as e:
# 计算错误提示
messagebox.showerror("错误", "输入格式无效!")
else:
# 追加输入内容
self.entry.insert(tk.END, text)
# 主程序入口
if __name__ == "__main__":
main_window = tk.Tk()
app = Calculator(main_window)
main_window.mainloop()
2. 代码核心解析
- 窗口初始化:通过
tk.Tk()创建主窗口,设置标题和尺寸; - 输入框组件:
Entry用于显示和输入计算表达式,右对齐展示更符合计算器习惯; - 按钮生成:通过列表循环动态创建数字和运算符按钮,简化代码;
- 事件绑定:
command参数绑定点击事件,实现清空、计算、输入等核心功能; - 异常处理:使用
try-except捕获无效计算表达式,提升程序稳定性。
3. 运行方式
直接运行代码,无需安装任何依赖,即可弹出计算器桌面窗口,支持基础四则运算。
三、PyQt5 实战:待办事项 (ToDoList) 桌面应用
PyQt5 功能更丰富,我们以待办事项管理工具为例,实现添加任务、删除任务、清空任务等实用功能,界面更美观。
1. 环境安装
首先通过 pip 安装 PyQt5 库:
bash
运行
pip install pyqt5
2. 完整源码
python
运行
# 导入PyQt5核心模块
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
QLineEdit, QPushButton, QListWidget, QMessageBox)
import sys
# 定义主窗口类
class ToDoList(QMainWindow):
def __init__(self):
super().__init__()
self.init_ui() # 初始化界面
def init_ui(self):
# 窗口基础配置
self.setWindowTitle("PyQt5待办事项管理器")
self.setGeometry(100, 100, 400, 500)
# 创建中心部件和布局
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout(central_widget)
# 1. 任务输入框
self.task_input = QLineEdit()
self.task_input.setPlaceholderText("请输入待办任务...")
layout.addWidget(self.task_input)
# 2. 功能按钮
self.add_btn = QPushButton("添加任务")
self.add_btn.clicked.connect(self.add_task) # 绑定添加事件
layout.addWidget(self.add_btn)
self.del_btn = QPushButton("删除选中任务")
self.del_btn.clicked.connect(self.delete_task) # 绑定删除事件
layout.addWidget(self.del_btn)
self.clear_btn = QPushButton("清空所有任务")
self.clear_btn.clicked.connect(self.clear_task) # 绑定清空事件
layout.addWidget(self.clear_btn)
# 3. 任务列表展示
self.task_list = QListWidget()
layout.addWidget(self.task_list)
# 添加任务
def add_task(self):
task = self.task_input.text().strip()
if task:
self.task_list.addItem(task)
self.task_input.clear() # 清空输入框
else:
QMessageBox.warning(self, "提示", "任务内容不能为空!")
# 删除选中任务
def delete_task(self):
selected_item = self.task_list.currentItem()
if selected_item:
self.task_list.takeItem(self.task_list.row(selected_item))
else:
QMessageBox.warning(self, "提示", "请选择要删除的任务!")
# 清空所有任务
def clear_task(self):
self.task_list.clear()
# 主程序入口
if __name__ == "__main__":
app = QApplication(sys.argv)
window = ToDoList()
window.show()
sys.exit(app.exec_())
3. 代码核心解析
- 窗口继承:主窗口继承
QMainWindow,是 PyQt5 的标准主窗口类; - 布局管理:使用
QVBoxLayout垂直布局,自动排列组件,无需手动定位; - 组件功能:
QLineEdit:输入待办任务;QPushButton:功能按钮,绑定点击事件;QListWidget:展示任务列表,支持选中操作;
- 事件机制:通过
clicked.connect()绑定按钮与处理函数,实现交互逻辑; - 消息提示:
QMessageBox提供友好的提示弹窗,优化用户体验。
4. 运行方式
安装依赖后直接运行代码,即可打开待办事项管理工具,支持任务的增删清空。
四、两大框架开发总结
- Tkinter 适用场景:小型工具、快速开发、无额外依赖需求的简单 GUI 程序,新手入门首选;
- PyQt5 适用场景:中大型桌面应用、需要美观界面、复杂交互、自定义样式的商业项目;
- 通用开发思路:创建主窗口→添加组件→绑定事件→启动主循环,这是 Python GUI 开发的通用逻辑。
五、结语
Python GUI 开发门槛极低,Tkinter 适合快速入门和小型工具开发,PyQt5 适合专业级桌面应用。本文提供的两个实例都是完整可运行的源码,开发者可以在此基础上扩展功能,比如为计算器增加科学计算功能,为待办事项添加数据持久化(保存到文件 / 数据库)等。
无论是日常办公小工具,还是专业桌面软件,Python GUI 框架都能满足开发需求,建议新手先从 Tkinter 入门,掌握基础后再学习 PyQt5,快速实现自己的桌面应用想法。
文章适配说明
本文采用博客标准排版:标题分级、代码块格式化、核心内容标注、清晰的步骤解析,适配绝大多数技术博客平台(无需调整格式,直接复制发布即可)。所有内容均为原创实战教程,无违规内容,适合 Python 初学者学习参考。