无需前端经验,也能打造现代感十足的交互界面
还记得那些只能在黑乎乎命令行中运行的Python脚本吗?时代变了!2025年的用户期待的是界面美观、交互流畅的现代应用。好消息是,Python的GUI生态系统已经悄然进化,涌现出一批强大而又易用的界面库。
无论你是想快速开发一个小工具,还是构建复杂的企业级应用,总有一款适合你。下面就为大家介绍8个值得关注的Python GUI库。
传统桌面应用库
1. Tkinter - Python内置的GUI工具包
作为Python标准库的一部分,Tkinter无需额外安装,是初学者入门GUI开发最直接的选择。它提供了基本的窗口、按钮、输入框等组件,足以快速构建小型桌面工具。
import tkinter as tk
def say_hello():
greeting_label.config(text="Hello, " + name_entry.get())
# 创建主窗口
root = tk.Tk()
root.title("Tkinter Example")
root.geometry("300x150")
# 创建控件
name_label = tk.Label(root, text="Enter your name:")
name_entry = tk.Entry(root)
greeting_label = tk.Label(root, text="")
confirm_button = tk.Button(root, text="Say Hello", command=say_hello)
# 布局控件
name_label.pack(pady=5)
name_entry.pack(pady=5)
confirm_button.pack(pady=5)
greeting_label.pack(pady=5)
# 启动事件循环
root.mainloop(A
2. Kivy - 跨平台的多点触控应用库
Kivy是一个开源的Python库,非常适合开发需要跨平台(包括移动设备)运行且支持多点触控的应用程序。它使用独特的KV语言来分离界面设计与业务逻辑。
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
class KivyApp(App):
def build(self):
# 创建主布局
layout = BoxLayout(orientation='vertical', padding=20, spacing=10)
# 创建控件
self.name_input = TextInput(
hint_text='Enter your name',
size_hint=(1, 0.2)
)
self.greeting_label = Label(
text='Greeting will appear here',
size_hint=(1, 0.2)
)
confirm_button = Button(
text='Say Hello',
size_hint=(1, 0.2)
)
confirm_button.bind(on_press=self.say_hello)
# 添加控件到布局
layout.add_widget(self.name_input)
layout.add_widget(confirm_button)
layout.add_widget(self.greeting_label)
return layout
def say_hello(self, instance):
self.greeting_label.text = "Hello, " + self.name_input.text
if __name__ == '__main__':
KivyApp().run()
现代Web风格应用库
3. Flet - 基于Flutter的现代UI
Flet是一个新兴的GUI框架,它将Flutter的强大UI引擎带到了Python中-2。你可以使用Python构建美观的Web、桌面和移动应用,享受热重载、跨平台部署等特性,而无需编写任何Dart代码。
Flet允许开发者使用Python语言,利用Flutter的强大能力来构建美观的Web、桌面和移动应用。它支持热重载和跨平台部署,让你能用纯Python创建出像素级完美的界面。
核心特性:
- 纯Python编写UI,无需HTML/CSS/JS
import flet as ft
def main(page: ft.Page):
# 页面基础设置
page.title = "Flet Example"
page.vertical_alignment = ft.MainAxisAlignment.CENTER
page.horizontal_alignment = ft.CrossAxisAlignment.CENTER
# 创建控件
name_field = ft.TextField(
label="Your name",
width=300,
text_align=ft.TextAlign.LEFT
)
greeting_text = ft.Text()
def button_clicked(e):
greeting_text.value = f"Hello, {name_field.value}!"
page.update()
confirm_button = ft.ElevatedButton(
text="Say Hello",
on_click=button_clicked
)
# 将控件添加到页面
page.add(
name_field,
confirm_button,
greeting_text
)
# 启动应用(可在桌面运行,或通过浏览器访问)
ft.app(target=main)
# 若想以Web应用运行,可改用:ft.app(target=main, view=ft.WEB_BROWSER)
4. NiceGUI - 简约高效的Web界面
NiceGUI是一个基于FastAPI和Vue.js的高级GUI框架,让你只需编写Python代码就能创建出功能丰富的浏览器基应用。它非常适合制作仪表盘、内部工具或交互式原型。
NiceGUI让你能够通过编写纯Python代码,生成基于浏览器的精美用户界面。它底层使用FastAPI和Vue.js,但你完全不需要了解这些技术,只需专注于Python开发即可。
典型应用场景:
from nicegui import ui
def greet():
greeting_label.set_text(f"Hello, {name_input.value}!")
# 创建控件
name_input = ui.input(label='Enter your name')
confirm_button = ui.button('Say Hello', on_click=greet)
greeting_label = ui.label()
# 启动应用(默认在 http://localhost:8080 运行)
ui.run()
最近发布的NiceGUI 3.0.0引入了许多新特性和改进,包括新的脚本模式和事件系统,值得关注。
5. Eel - 连接Python与Web技术
Eel是一个轻量级的库,可以让你轻松地将Python后端与基于HTML/CSS/JavaScript的前端连接起来。如果你已有Web开发经验,希望用Web技术构建桌面应用界面,Eel是个不错的选择。
如果你已经熟悉HTML、CSS和JavaScript,Eel提供了一种简单的方式,将现有的Web技术封装到Python应用程序中。它类似于Electron,但更加轻量级。
核心特性:
Python后端 (main.py):
import eel
# 初始化包含Web文件的文件夹
eel.init('web')
# 暴露Python函数给JavaScript
@eel.expose
def greet_user(name):
return f"Hello, {name}!"
# 启动应用
eel.start('index.html', size=(400, 300))
HTML前端 (web/index.html):
<!DOCTYPE html>
<html>
<head>
<title>Eel Example</title>
</head>
<body>
<input type="text" id="nameInput" placeholder="Enter your name">
<button onclick="sayHello()">Say Hello</button>
<p id="greeting"></p>
<script type="text/javascript" src="/eel.js"></script>
<script>
async function sayHello() {
const name = document.getElementById('nameInput').value;
const greeting = await eel.greet_user(name)();
document.getElementById('greeting').innerText = greeting;
}
</script>
</body>
</html>
6. Reflex - 全栈Python解决方案
Reflex(前身为Pynecone)让你能够完全使用Python构建全栈Web应用。它会自动生成React前端,并提供内置的状态管理,非常适合需要现代化用户界面的复杂应用。
特色功能:
import reflex as rx
class State(rx.State):
name: str = ""
counter: int = 0
def set_name(self, name):
self.name = name
def increment_counter(self):
self.counter += 1
def index():
return rx.vstack(
rx.input(
placeholder="Enter your name",
on_change=State.set_name,
width="200px"
),
rx.button(
"Say Hello",
on_click=lambda: State.set_name(State.name),
width="200px"
),
rx.text(State.name),
rx.divider(),
rx.text(f"Counter: {State.counter}"),
rx.button(
"Increment",
on_click=State.increment_counter,
width="200px"
),
spacing="1em",
align="center",
padding_top="10%"
)
app = rx.App()
app.add_page(index)
app.compile()
7. PyWebView - 轻量级Web视图
PyWebView使用系统原生的WebView组件来显示Web内容,而无需像Electron那样捆绑整个浏览器引擎。它是一个极其轻量级的解决方案,适合将现有Web应用打包为桌面程序。

核心优势:
import webview
import threading
def run_window():
# 创建浏览器窗口
window = webview.create_window(
'PyWebView Example',
'web/index.html', # 加载本地HTML文件
width=400,
height=300
)
webview.start()
# 在后台线程中启动窗口
if __name__ == '__main__':
thread = threading.Thread(target=run_window)
thread.start()
终端文本界面库
8. Textual - 终端里的现代GUI
Textual是一个强大的Python库,用于在终端中创建丰富的文本用户界面。它支持类似CSS的样式、鼠标操作和异步编程,可以让你为命令行工具打造现代感的交互体验。

Textual是一个用于构建现代文本用户界面的框架,它在终端中提供了类似GUI的体验。支持1670万种颜色、鼠标交互和流畅的动画效果,彻底改变了传统命令行工具的使用体验。
核心优势:
适用场景:
from textual.app import App, ComposeResult
from textual.widgets import Header, Footer, Static
from textual.containers import Container
from textual import events
class ClockApp(App):
CSS = """
Container {
align: center middle;
height: 100%;
}
#time_display {
width: auto;
height: auto;
background: $panel;
color: $text;
padding: 1 2;
border: tall $background;
}
#time_display:focus {
border: tall $accent;
}
"""
def compose(self) -> ComposeResult:
yield Header()
yield Container(Static("00:00:00", id="time_display"))
yield Footer()
def on_ready(self) -> None:
self.set_interval(1, self.update_time)
def update_time(self):
from datetime import datetime
current_time = datetime.now().strftime("%H:%M:%S")
self.query_one("#time_display", Static).update(current_time)
if __name__ == "__main__":
app = ClockApp()
app.run()
高性能专业应用库
9. Dear PyGui - GPU加速的专业级GUI
Dear PyGui是一个GPU加速的图形界面库,其设计灵感来源于游戏引擎。它特别适合需要高频刷新和数据可视化的场景,如工程工具、科学计算和实时仪表盘。

如果你需要开发数据可视化应用、工程工具或实时仪表盘,Dear PyGui是个不错的选择。它采用GPU加速渲染,性能出色,特别适合需要高频刷新和数据密集型场景。
核心优势:
from dearpygui.core import *
from dearpygui.simple import *
def save_callback(sender, data):
input_value = get_value("Input Text")
log_debug(f"Input value saved as: {input_value}")
def button_callback(sender, data):
input_value = get_value("Input Text")
add_text("Result Text", f"You entered: {input_value}")
with window("Main Window"):
add_text("This is a Dear PyGUI example")
add_input_text("Input Text", label="Type something", default_value="Hello GUI")
add_button("Show Input", callback=button_callback)
add_same_line()
add_button("Save", callback=save_callback)
add_separator()
add_text("Result Text", default_value="Your input will appear here")
start_dearpygui()
各场景选库参考
选择哪个库,主要看你的具体需求:
- 初学者或快速开发小型工具:从 Tkinter 开始最稳妥。
- 追求美观且跨平台的现代应用:Flet 能带来类似Flutter的体验。
- 数据密集型或高性能应用:Dear PyGui 的GPU加速能派上用场。
- 快速创建浏览器基的内部工具:NiceGUI 或 Reflex 效率很高。
- 将现有Web项目打包为桌面应用:Eel 或 PyWebView 很合适。
- 为命令行工具增强交互性:Textual 能让终端程序焕然一新。
| | | |
|---|
| Flet | | | |
| Dear PyGui | | | |
| NiceGUI | 基于Web,仅需Python,自动生成VueJS前端 | | |
| Eel | 轻量级,可连接Python与现有Web技术(HTML/CSS/JS) | | |
| Reflex | 全栈Python,生成React前端,内置状态管理 | | |
| Textual | | | |
| PyWebView | | | |
| Tkinter | | | |
| Kivy | | | |
希望这些例子能帮助你更好地向读者展示不同Python GUI库的特点。根据文章风格,你可以选择呈现全部或部分示例。
阅读原文:原文链接
该文章在 2025/11/14 11:13:34 编辑过