社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

数据STUDIO • 4 月前 • 470 次点击  


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


还记得那些只能在黑乎乎命令行中运行的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=(10.2)
        )
        self.greeting_label = Label(
            text='Greeting will appear here',
            size_hint=(10.2)
        )
        confirm_button = Button(
            text='Say Hello',
            size_hint=(10.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
  • 支持Web、桌面和移动端运行
  • 实时热更新、调试体验流畅
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是个不错的选择。

Eel入门还有一些案例_eel库-CSDN博客

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

核心特性

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

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=(400300))

HTML前端 (web/index.html):

html>
<html>
<head>
    <title>Eel Exampletitle>
head>
<body>
    <input type="text" id="nameInput" placeholder="Enter your name">
    <button onclick="sayHello()">Say Hellobutton>
    <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前端,并提供内置的状态管理,非常适合需要现代化用户界面的复杂应用。


特色功能

  • 完整的全栈应用开发能力
  • 内置状态管理
  • 基于React的高质量UI
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应用打包为桌面程序。

pywebview | pywebview

macOS

核心优势

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

核心优势

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

适用场景

  • 终端工具开发
  • 数据可视化
  • 系统监控工具
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加速渲染,性能出色,特别适合需要高频刷新和数据密集型场景。

核心优势

  • 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加速能派上用场。
  • 快速创建浏览器基的内部工具NiceGUI 或 Reflex 效率很高。
  • 将现有Web项目打包为桌面应用Eel 或 PyWebView 很合适。
  • 为命令行工具增强交互性Textual 能让终端程序焕然一新。
库名称
主要特点
理想应用场景
示例代码简要说明
Flet
基于Flutter,跨平台(Web/桌面/移动)
需要精美UI和跨平台部署的现代应用
简单的输入和按钮交互
Dear PyGui
GPU加速,适合数据密集型应用
数据可视化、工程工具、实时仪表盘
基础窗口和交互元素
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应用嵌入原生窗口
创建加载网页的窗口
Tkinter
Python内置,无需安装,简单易用
快速开发小型桌面工具、初学者学习
经典的按钮点击事件
Kivy
开源,跨平台,支持多点触控
移动应用、需要触控功能的桌面应用
屏幕管理和按钮交互

希望这些例子能帮助你更好地向读者展示不同Python GUI库的特点。根据文章风格,你可以选择呈现全部或部分示例。需要进一步探讨的话,我们随时可以继续交流。


🏴‍☠️宝藏级🏴‍☠️ 原创公众号『 数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉 PythonMySQL数据分析数据可视化机器学习与数据挖掘爬虫 等,从入门到进阶!

长按👇关注- 数据STUDIO -设为星标,干货速递

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/189047