你是不是也觉得Python好是好,就是做个带界面的桌面应用太费劲了,是时候打破这个刻板印象了。如今的Python在GUI开发领域早就不是吴下阿蒙了。今天介绍的Python GUI库都可以打造炫酷的应用。
在此之前,我们先搞定一切的基础 ------ 开发环境。项目一多,Python版本就成了个头疼事。老项目可能还跑在Python 2.7上,新项目又想用最新的3.12特性,来回切换环境能把人折腾死。
那就不得不安利ServBay了,它能一键安装和管理N个Python版本,支持从老掉牙的2.7到最新的3.14。不管是维护祖传代码,还是开发新项目,都不用再为Python版本兼容性问题挠头了。环境搞定了,咱们才能安心搞开发。

好了,言归正传,来看看有库能让我们的Python应用改头换面。
Tkinter - Python官方标配,无需安装的GUI库
只要安装了Python,就有了Tkinter。作为Python的原配,它最大的优点就是不用装,直接用。虽然界面看起来有点古早,但做点内部用的小工具、简单的管理界面,绝对是够用的。胜在稳定、轻量,而且资料多,遇到问题随便一搜就是一大把解决方案。
特点:
- Python标准库成员,无需安装。
- 简单直接,上手快。
- 界面拥有内在美。
            
            
              python
              
              
            
          
          import tkinter as tk
from tkinter import messagebox
def show_greeting():
    messagebox.showinfo("问候", "你好,来自Tkinter的世界!")
# 创建主窗口
window = tk.Tk()
window.title("我的第一个Tkinter应用")
window.geometry("300x150")
# 创建一个按钮
greet_button = tk.Button(window, text="点我打个招呼", command=show_greeting)
greet_button.pack(pady=40)
# 启动事件循环
window.mainloop()PySimpleGUI - 简化GUI代码,界面开发更轻松
如果觉得Tkinter有点啰嗦,界面也不够好看,那可以试试PySimpleGUI。它把Tkinter(以及Qt, WxPython等)复杂的部分都包装起来了,用几行代码就能搭出一个看起来还不错的界面。它的逻辑非常直观,就是通过各种元素堆叠出一个布局,然后用一个事件循环来处理用户操作。
特点:
- 代码极其简洁,学习成本低。
- 是对其他GUI库的封装,颜值比原生Tkinter高不少。
- 适合快速开发简单的图形界面工具。
            
            
              python
              
              
            
          
          import PySimpleGUI as sg
# 定义窗口布局
layout = [
    [sg.Text("请输入你的大名:")],
    [sg.InputText(key='-NAME-')],
    [sg.Button("确定"), sg.Button("退出")]
]
# 创建窗口
window = sg.Window("PySimpleGUI 示例", layout)
# 事件循环
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == '退出':
        break
    if event == '确定':
        sg.popup(f"你好, {values['-NAME-']}!")
window.close()Flet - 用Python驱动Flutter,构建跨平台精美UI
Flet就厉害了,它能用Python直接调用Google的Flutter引擎来构建UI,不用通过Dart语言,就能做出拥有Flutter级别精美UI和流畅动画的应用。更牛的是,它天生跨平台,一套代码可以跑在桌面、Web甚至手机上。
特点:
- 
基于Flutter,UI精美,性能优秀。 
- 
真正的跨平台,Web、桌面、移动端通吃。 
- 
对于想尝试Flutter又不想学Dart的Pythonista来说是绝配。 
            
            
              css
              
              
            
          
          import flet as ft
import time
def main(page: ft.Page):
    page.title = "Flet 计数器"
    page.vertical_alignment = ft.MainAxisAlignment.CENTER
    txt_number = ft.TextField(value="0", text_align=ft.TextAlign.RIGHT, width=100)
    def minus_click(e):
        txt_number.value = str(int(txt_number.value) - 1)
        page.update()
    def plus_click(e):
        txt_number.value = str(int(txt_number.value) + 1)
        page.update()
    page.add(
        ft.Row(
            [
                ft.IconButton(ft.icons.REMOVE, on_click=minus_click),
                txt_number,
                ft.IconButton(ft.icons.ADD, on_click=plus_click),
            ],
            alignment=ft.MainAxisAlignment.CENTER,
        )
    )
ft.app(target=main)NiceGUI - 用Python代码,构建现代化Web UI
NiceGUI的思路很巧妙。它在底层用了FastAPI和Vue.js这些成熟的Web技术,但把它们都藏起来了。只需要用Python写前端逻辑,它会自动生成一个漂亮的Web界面。这个界面既可以在浏览器里访问,也可以打包成一个独立的桌面应用。非常适合做数据看板、Web小工具这类应用。
特点:
- 
只写Python,就能得到一个现代化的Web UI。 
- 
部署灵活,既是网站,也是桌面应用。 
- 
非常适合需要网络交互和漂亮UI的内部工具。 
            
            
              python
              
              
            
          
          from nicegui import ui
def handle_greet():
    ui.notify(f'你好啊, {name_input.value}!')
ui.label('请输入你的名字:')
name_input = ui.input(placeholder='在这里输入...')
ui.button('打招呼', on_click=handle_greet)
ui.run()PyWebview - 将现有Web技术打包成轻量级桌面应用
如果你本身就是个前端高手,熟悉HTML/CSS/JS,那么PyWebview简直是为你量身定做的,买它!它能创建一个轻量级的原生窗口,然后在里面加载Web页面。和重量级的Electron不同,它用的是操作系统自带的WebView控件,所以打包出来的应用体积非常小。Python和JavaScript之间还能互相调用函数,实现前后端交互。
特点:
- 极其轻量,打包体积小。
- 充分利用已有的Web开发技能。
- Python与JS双向通信,灵活性高。
            
            
              python
              
              
            
          
          import webview
import threading
import time
def background_task(window):
    """一个在后台运行的Python函数,可以与JS交互"""
    time.sleep(5)
    window.evaluate_js('alert("Python在5秒后向你问好!");')
if __name__ == '__main__':
    window = webview.create_window(
        'PyWebview 示例',
        html='<h1>这是一个本地HTML内容</h1><p>等待Python的消息...</p>'
    )
    # 启动后台线程
    thread = threading.Thread(target=background_task, args=(window,))
    thread.start()
    webview.start()Dear PyGui - GPU加速,为高性能数据可视化而生
Dear PyGui是个狼灭,直接使用GPU进行渲染,性能炸裂,就像游戏引擎里的UI系统一样。这使得它在处理需要高速刷新、数据量巨大的场景时(比如数据可视化、实时图表、开发工具)游刃有余。它的API是立即模式(Immediate Mode),写法和传统GUI有点不一样,但习惯了之后会觉得非常直观。
特点:
- GPU加速,性能超强。
- 非常适合数据密集型应用和开发工具。
- 独特的立即模式API。
            
            
              python
              
              
            
          
          import dearpygui.dearpygui as dpg
dpg.create_context()
def save_callback(sender, app_data):
    user_input = dpg.get_value("input_text")
    print(f"用户输入的内容是: {user_input}")
    dpg.set_value("output_text", f"已保存: {user_input}")
with dpg.window(label="Dear PyGui 示例", width=400, height=200):
    dpg.add_input_text(label="输入点什么", tag="input_text")
    dpg.add_button(label="保存", callback=save_callback)
    dpg.add_text("", tag="output_text")
dpg.create_viewport(title='我的应用', width=420, height=240)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()Kivy - 为多点触控设计的跨平台框架
Kivy从设计之初就考虑了多点触控。它的目标是"一次编码,处处运行",尤其擅长在Windows, macOS, Linux, Android和iOS上构建应用。它有自己的一套UI渲染引擎,不依赖原生控件,所以能保证在所有平台上的外观和行为都完全一致。如果你想用Python开发一个手机App或者触摸屏应用,Kivy绝对是首选之一。
特点:
- 
专为触摸屏和多点触控设计。 
- 
强大的跨平台能力,尤其是在移动端。 
- 
UI外观在所有平台保持一致。 
            
            
              python
              
              
            
          
          from kivy.app import App
from kivy.uix.button import Button
class MyApp(App):
    def build(self):
        return Button(
            text='这是一个Kivy按钮',
            font_size='24sp',
            on_press=self.btn_press
        )
    
    def btn_press(self, instance):
        instance.text = '我被按了一下!'
if __name__ == '__main__':
    MyApp().run()Toga - 使用系统原生控件的跨平台GUI库
Toga是BeeWare项目的一部分,它的哲学和Kivy正好相反。Toga追求的是在每个平台上都使用系统原生的UI控件。这意味着你的应用在Windows上看起来就像个标准的Windows程序,在macOS上就有地道的macOS范儿。这种方式能给用户带来最熟悉、最亲切的操作体验。
特点:
- 
使用平台原生控件,用户体验好。 
- 
BeeWare套件的一部分,生态完整。 
- 
跨平台,但追求平台原生外观。 
            
            
              python
              
              
            
          
          import toga
from toga.style import Pack
from toga.style.pack import COLUMN, ROW
class TogaApp(toga.App):
    def startup(self):
        main_box = toga.Box(style=Pack(direction=COLUMN))
        name_label = toga.Label("你的名字: ", style=Pack(padding=(0, 5)))
        self.name_input = toga.TextInput(style=Pack(flex=1))
        name_box = toga.Box(style=Pack(direction=ROW, padding=5))
        name_box.add(name_label)
        name_box.add(self.name_input)
        button = toga.Button(
            "打个招呼",
            on_press=self.say_hello,
            style=Pack(padding=5)
        )
        main_box.add(name_box)
        main_box.add(button)
        self.main_window = toga.MainWindow(title=self.formal_name)
        self.main_window.content = main_box
        self.main_window.show()
    def say_hello(self, widget):
        self.main_window.info_dialog(
            '问候',
            f'你好, {self.name_input.value}'
        )
def main():
    return TogaApp('你好 Toga', 'org.example.hellotoga')
if __name__ == '__main__':
    main().main_loop()Gooey - 一键将命令行程序转换成GUI应用
最后这个Gooey,思路清奇。它不是让你从头写一个GUI,而是把你现成的命令行工具(CLI)一键变成一个GUI应用。你只需要在你的主函数上加一个装饰器,它就能自动根据你的argparse参数定义,生成一个简单明了的图形界面。对于那些写了很多命令行工具,又想让非技术人员也能轻松使用的开发者来说,这简直是天降神器。
特点:
- 
将命令行程序秒变GUI。 
- 
零成本改造现有项目。 
- 
对 argparse支持完美。
            
            
              python
              
              
            
          
          from gooey import Gooey, GooeyParser
@Gooey(program_name="一个简单的计算器")
def main():
    parser = GooeyParser(description="输入两个数,我来帮你加起来")
    parser.add_argument('num1', type=int, help='第一个数字')
    parser.add_argument('num2', type=int, help='第二个数字')
    args = parser.parse_args()
    
    result = args.num1 + args.num2
    print(f"计算结果是: {result}")
    # 在GUI模式下,print的内容会显示在一个文本框里
if __name__ == '__main__':
    main()总结
Python的GUI库还是有很多很好用的。
- 想快速搞定个小工具,Tkinter 和 PySimpleGUI 随叫随到。
- 追求现代化UI和跨平台,Flet 和 NiceGUI 让你眼前一亮。
- 已有Web项目想打包,PyWebview 是轻量级的最佳选择。
- 需要处理海量数据或追求极致性能,Dear PyGui 舍我其谁。
- 想进军移动端或触摸屏,Kivy 和 Toga 各有千秋。
- 懒得写GUI,又想给命令行工具套个壳,Gooey 就是你的"一键美颜"按钮。
无论你的需求是什么,总能找到合适的轮子。下次再有人说Python做不了桌面应用,就把这篇文章甩给他!