Python GUI 开发实战:PyQt5 与 Tkinter 桌面应用实例详解

在 Python 桌面应用开发领域,GUI(图形用户界面)框架是核心工具,其中Tkinter作为 Python 内置标准库,轻量简洁、开箱即用;PyQt5作为成熟的商业级框架,功能强大、界面美观,是开发者最常用的两大选择。
本文将通过完整可运行的源码实例,分别讲解 Tkinter 和 PyQt5 的基础开发流程,实现一个功能完整的桌面小工具,帮助新手快速上手 Python GUI 开发,无需复杂配置,直接复制源码即可运行。

一、Python GUI 框架选型对比

在开发前,我们先简单对比两大框架的核心特点,方便根据需求选择:
  1. Tkinter
    • 优点:Python 内置,无需额外安装,学习成本极低,适合小型工具、快速原型开发;
    • 缺点:组件样式原生,高级功能有限,复杂界面开发效率较低。
  2. 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. 代码核心解析

  1. 窗口初始化:通过tk.Tk()创建主窗口,设置标题和尺寸;
  2. 输入框组件Entry用于显示和输入计算表达式,右对齐展示更符合计算器习惯;
  3. 按钮生成:通过列表循环动态创建数字和运算符按钮,简化代码;
  4. 事件绑定command参数绑定点击事件,实现清空、计算、输入等核心功能;
  5. 异常处理:使用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. 代码核心解析

  1. 窗口继承:主窗口继承QMainWindow,是 PyQt5 的标准主窗口类;
  2. 布局管理:使用QVBoxLayout垂直布局,自动排列组件,无需手动定位;
  3. 组件功能
    • QLineEdit:输入待办任务;
    • QPushButton:功能按钮,绑定点击事件;
    • QListWidget:展示任务列表,支持选中操作;
  4. 事件机制:通过clicked.connect()绑定按钮与处理函数,实现交互逻辑;
  5. 消息提示QMessageBox提供友好的提示弹窗,优化用户体验。

4. 运行方式

安装依赖后直接运行代码,即可打开待办事项管理工具,支持任务的增删清空。

四、两大框架开发总结

  1. Tkinter 适用场景:小型工具、快速开发、无额外依赖需求的简单 GUI 程序,新手入门首选;
  2. PyQt5 适用场景:中大型桌面应用、需要美观界面、复杂交互、自定义样式的商业项目;
  3. 通用开发思路:创建主窗口→添加组件→绑定事件→启动主循环,这是 Python GUI 开发的通用逻辑。

五、结语

Python GUI 开发门槛极低,Tkinter 适合快速入门和小型工具开发,PyQt5 适合专业级桌面应用。本文提供的两个实例都是完整可运行的源码,开发者可以在此基础上扩展功能,比如为计算器增加科学计算功能,为待办事项添加数据持久化(保存到文件 / 数据库)等。
无论是日常办公小工具,还是专业桌面软件,Python GUI 框架都能满足开发需求,建议新手先从 Tkinter 入门,掌握基础后再学习 PyQt5,快速实现自己的桌面应用想法。

文章适配说明

本文采用博客标准排版:标题分级、代码块格式化、核心内容标注、清晰的步骤解析,适配绝大多数技术博客平台(无需调整格式,直接复制发布即可)。所有内容均为原创实战教程,无违规内容,适合 Python 初学者学习参考。

会员自媒体 Python Python GUI 开发实战:PyQt5 与 Tkinter 桌面应用实例详解 https://yuelu1.cn/26293.html

相关文章

猜你喜欢