2025年,这9个Python GUI 库让我眼前一亮

B站影视 欧美电影 2025-11-18 16:02 1

摘要:还记得那些只能在黑乎乎命令行中运行的Python脚本吗?时代变了!2025年的用户期待的是界面美观、交互流畅的现代应用。好消息是,Python的GUI生态系统已经悄然进化,涌现出一批强大而又易用的界面库。

无需前端经验,也能打造现代感十足的交互界面

还记得那些只能在黑乎乎命令行中运行的Python脚本吗?时代变了!2025年的用户期待的是界面美观、交互流畅的现代应用。好消息是,Python的GUI生态系统已经悄然进化,涌现出一批强大而又易用的界面库。

无论你是想快速开发一个小工具,还是构建复杂的企业级应用,总有一款适合你。下面就为大家介绍8个值得关注的Python GUI库。

1. Tkinter - Python内置的GUI工具包

作为Python标准库的一部分,Tkinter无需额外安装,是初学者入门GUI开发最直接的选择。它提供了基本的窗口、按钮、输入框等组件,足以快速构建小型桌面工具。

import tkinter as tk# 定义一个函数,用于处理按钮点击事件def say_hello: """ 从输入框获取名字,并在问候语标签中显示问候信息。 """ # .get 方法获取 Entry 控件中的文本 name = name_entry.get # .config 方法用于更新控件的属性,这里更新 text 属性 greeting_label.config(text="Hello, " + name)# --- 主程序部分 ---# 1. 创建主窗口root = tk.Tkroot.title("Tkinter Example")root.geometry("300x150")# 2. 创建各种控件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) # command 参数绑定函数# 3. 使用 pack 布局管理器来排列控件# pack 会将控件依次放置,默认是垂直排列name_label.pack(pady=5)name_entry.pack(pady=5)confirm_button.pack(pady=5)greeting_label.pack(pady=5)# 4. 启动事件循环,让窗口显示并响应用户操作root.mainloop

输出结果:

2. Kivy - 跨平台的多点触控应用库

Kivy是一个开源的Python库,非常适合开发需要跨平台(包括移动设备)运行且支持多点触控的应用程序。它使用独特的KV语言来分离界面设计与业务逻辑。

from kivy.app import Appfrom kivy.uix.boxlayout import BoxLayoutfrom kivy.uix.label import Labelfrom kivy.uix.textinput import TextInputfrom kivy.uix.button import Buttonclass 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.textif __name__ == '__main__': KivyApp.run

输出结果:

3.Flet- 基于Flutter的现代UI

Flet是一个新兴的GUI框架,它将Flutter的强大UI引擎带到了Python中-2。你可以使用Python构建美观的Web、桌面和移动应用,享受热重载、跨平台部署等特性,而无需编写任何Dart代码。

Flet允许开发者使用Python语言,利用Flutter的强大能力来构建美观的Web、桌面和移动应用。它支持热重载和跨平台部署,让你能用纯Python创建出像素级完美的界面。

核心特性

纯Python编写UI,无需HTML/CSS/JS支持Web、桌面和移动端运行实时热更新、调试体验流畅import flet as ftdef 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 uidef 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(port=8090)

输出结果:

最近发布的NiceGUI 3.0.0引入了许多新特性和改进,包括新的脚本模式和事件系统,值得关注。

5. Eel - 连接Python与Web技术

Eel是一个轻量级的库,可以让你轻松地将Python后端与基于HTML/CSS/JavaScript的前端连接起来。如果你已有Web开发经验,希望用Web技术构建桌面应用界面,Eel是个不错的选择。

如果你已经熟悉HTML、CSS和JavaScript,Eel提供了一种简单的方式,将现有的Web技术封装到Python应用程序中。它类似于Electron,但更加轻量级。

核心特性

支持现有的Web技术栈Python与JavaScript双向通信轻量级,易于上手

Python后端 (main.py):

import eel# 初始化包含Web文件的文件夹eel.init('web')# 暴露Python函数给JavaScript@eel.exposedef greet_user(name): return f"Hello, {name}!"# 启动应用eel.start('index.html', size=(400, 300)) Say Hello

运行结果:

6.Reflex- 全栈Python解决方案

Reflex(前身为Pynecone)让你能够完全使用Python构建全栈Web应用。它会自动生成React前端,并提供内置的状态管理,非常适合需要现代化用户界面的复杂应用。

特色功能

完整的全栈应用开发能力内置状态管理基于React的高质量UIimport reflex as rxclass State(rx.State): name: str = "" counter: int = 0 def set_name(self, name): self.name = name def increment_counter(self): self.counter += 1def 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.Appapp.add_page(index)app.compile

7.PyWebView- 轻量级Web视图

PyWebView使用系统原生的WebView组件来显示Web内容,而无需像Electron那样捆绑整个浏览器引擎。它是一个极其轻量级的解决方案,适合将现有Web应用打包为桌面程序。

核心优势

超轻量级,占用资源少原生窗口与Web技术结合简单的JavaScript-Python桥接import webviewimport threadingdef 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万种颜色、鼠标交互和流畅的动画效果,彻底改变了传统命令行工具的使用体验。

核心优势

在终端中创建丰富的用户界面支持CSS样式和现代色彩完整的鼠标和键盘支持

适用场景

终端工具开发数据可视化系统监控工具from textual.app import App, ComposeResultfrom textual.widgets import Header, Footer, Staticfrom textual.containers import Containerfrom textual import eventsclass 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加速渲染,性能出色,特别适合需要高频刷新和数据密集型场景。

核心优势

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 开始最稳妥。移动端或需要触控支持Kivy 是专为此设计的。追求美观且跨平台的现代应用Flet 能带来类似Flutter的体验。数据密集型或高性能应用Dear PyGui 的GPU加速能派上用场。快速创建浏览器基的内部工具NiceGUIReflex 效率很高。将现有Web项目打包为桌面应用EelPyWebView 很合适。为命令行工具增强交互性Textual 能让终端程序焕然一新。库名称主要特点理想应用场景示例代码简要说明Flet基于Flutter,跨平台(Web/桌面/移动)需要精美UI和跨平台部署的现代应用简单的输入和按钮交互Dear PyGuiGPU加速,适合数据密集型应用数据可视化、工程工具、实时仪表盘基础窗口和交互元素NiceGUI基于Web,仅需Python,自动生成VueJS前端内部工具、仪表盘、交互式原型输入响应和最小应用结构Eel轻量级,可连接Python与现有Web技术(HTML/CSS/JS)将现有Web项目快速打包为桌面应用Python与JavaScript的互相调用Reflex全栈Python,生成React前端,内置状态管理需要React级别UI质量的全栈Web应用状态管理与UI绑定的计数器Textual在终端中创建丰富的文本用户界面,支持CSS和鼠标终端工具、数据监控、命令行程序现代化简单的计时器显示PyWebView轻量级,使用系统原生WebView组件以最小开销将Web应用嵌入原生窗口创建加载网页的窗口TkinterPython内置,无需安装,简单易用快速开发小型桌面工具、初学者学习经典的按钮点击事件Kivy开源,跨平台,支持多点触控移动应用、需要触控功能的桌面应用屏幕管理和按钮交互

来源:不秃头程序员

相关推荐