Python神器NiceGUI:手把手带你从0到精通,写GUI界面从未如此简单!

前言:Python做GUI总得折腾PyQt、Tkinter这些庞然大物,写个简单界面都像是在搬砖。忽然,我想起了 NiceGUI——一个超轻量、超简单、超好用的Python GUI框架!想着很多小伙伴可能还没用过,那必须得给你们整一期深入教程了!🔥

 编程资料、学习路线图、源代码、软件安装包等!【点击这里免费领取】!  


🎉 NiceGUI 是个啥?

NiceGUI 是一个基于 Python + Web 的 GUI 框架,它的 界面直接在浏览器里运行,但代码写起来像 Tkinter 一样简单。最重要的是,它完全 不需要前端知识,适合咱们这种专注于 Python 的人。

安装起来也超级简单:

pip install nicegui

然后,跑一个最简单的例子👇

from nicegui import ui  

ui.label('Hello, NiceGUI!')  # 显示文本
ui.run()  # 运行服务器

运行后,你的浏览器里就会打开一个页面,显示 “Hello, NiceGUI!”,这也太丝滑了吧?!😂


📌 核心功能详解:从入门到进阶

NiceGUI 提供了丰富的 组件和功能,花姐带你飞,从 基础到进阶 一步步搞懂它的强大之处!


1️⃣ Text Elements(文本组件)

文本组件是 GUI 里最基础的内容,比如 标题、段落、代码框 等。

👀 示例:不同类型的文本
from nicegui import ui  

ui.label('普通文本')
ui.markdown('# 这是一级标题\n## 这是二级标题')
ui.html('<b>支持 HTML 代码哦!</b>')

ui.run()

图片

🌟 重点

  • ui.label() 👉 适用于普通文本。

  • ui.markdown() 👉 适用于带格式的文本。

  • ui.html() 👉 可以直接嵌入 HTML 代码。


2️⃣ Controls(控制组件)

UI 交互怎么能少了按钮、输入框、滑块这些小玩意呢?

👀 示例:按钮+输入框
from nicegui import ui  

def on_click():
    ui.notify('你点击了按钮!🎉')

ui.button('点我!', on_click=on_click)

ui.input(label='请输入点啥', placeholder='开始输入',
         on_change=lambda e: result.set_text('你输入的内容为: ' + e.value),
         validation={'输入的内容太长了': lambda value: len(value) < 20})
result = ui.label()

ui.run()

图片

🌟 重点

  • ui.button('文本', on_click=回调函数) 👉 让按钮拥有点击事件。

  • ui.input('提示文本') 👉 创建输入框,并可以绑定事件。

  • ui.notify('xxx') 👉 创建 通知框,可用于提示用户操作反馈!

😂 有趣的地方
可以用 notify() 来整点整活,比如输入 666 时弹出“老板牛逼!”😂


3️⃣ Audiovisual Elements(音视频组件)

NiceGUI 也支持 播放音频、视频、图片等多媒体内容,可以用来做 数据可视化,甚至可以做个 Web 版的音乐播放器!

👀 示例:展示图片+播放音频
from nicegui import ui  

ui.image('https://picsum.photos/300')  # 显示一张随机图片
ui.audio('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3', autoplay=True)

ui.run()

图片

🌟 重点

  • ui.image('图片路径') 👉 可以加载本地/网络图片。

  • ui.audio('音频路径', autoplay=True) 👉 播放音频,支持自动播放。

😂 细节注意
如果想让音频自动播放,部分浏览器可能需要 用户交互(比如点击一下页面)。


4️⃣ Data Elements(数据展示组件)

有时候我们需要展示数据,比如表格、进度条、统计信息等。

👀 示例:表格+进度条
from nicegui import ui  

columns = [
    {'name': '姓名1', 'label': '姓名', 'field': 'name', 'required': True, 'align': 'left'},
    {'name': '年龄1', 'label': '年龄', 'field': 'age', 'sortable': True},
]
rows = [
    {'name': '哪吒', 'age': 18},
    {'name': '张飞', 'age': 21},
    {'name': '三太子'},
]
ui.table(columns=columns, rows=rows, row_key='name')

ui.linear_progress(0.5)  # 50% 进度条

ui.run()

图片

🌟 重点

  • ui.table(columns=..., rows=...) 👉 轻松创建数据表格。

  • ui.linear_progress(0.5) 👉 进度条,值在 0~1 之间。

💡 开发者容易忽视的小细节
table 里的 columns 需要 name 和 label,否则不会正常显示!


5️⃣ Binding Properties(数据绑定)

NiceGUI 让 前端界面和 Python 代码的数据同步 变得异常简单,不需要手动监听事件,只要 绑定属性,前端改了,Python 变量自动更新!

👀 示例:输入框 + 实时同步数据
from nicegui import ui

data = {'name': '花姐', 'age': 17}

ui.label().bind_text_from(data, 'name', backward=lambda n: f'Name: {n}')
ui.label().bind_text_from(data, 'age', backward=lambda a: f'Age: {a}')

ui.button('年龄变成 18 岁', on_click=lambda: data.update(age=18))

ui.run()

图片

🌟 重点

  • bind_text_from 直接绑定数据,逻辑清晰,无需额外的监听器

  • 如果 data 的值是从数据库、API 或传感器获取的,你不需要不停 刷新 UI,数据变化 = UI 变化,完美!

💡 你可能忽略的细节
用 globals().update(变量=值) 可以让匿名函数修改外部变量,否则 Lambda 不能直接改外部变量


6️⃣ Page Layout(页面布局)

一个好看的界面离不开 布局,NiceGUI 里有 栅格系统、侧边栏、分区容器 这些布局工具。

👀 示例:左右布局 + 侧边栏
from nicegui import ui  

with ui.row():
    ui.button('左边的按钮')
    ui.button('右边的按钮')

with ui.column():
    ui.label('上面的文字')
    ui.label('下面的文字')

with ui.tabs().classes('w-full') as tabs:
    one = ui.tab('Tab1')
    two = ui.tab('Tab2')
with ui.tab_panels(tabs, value=two).classes('w-full'):
    with ui.tab_panel(one):
        ui.label('我是Tab1')
    with ui.tab_panel(two):
        ui.label('我是Tab2')

ui.run()

图片

🌟 重点

  • ui.row() 👉 水平布局,组件并排放置。

  • ui.column() 👉 垂直布局,组件上下排列。

  • ui.tabs() 👉 Tab标签页,适合用于分类展示信息 。


7️⃣ Styling & Appearance(界面美化)

默认的 NiceGUI 界面已经很清爽,但如果想要 更个性化的设计,可以调整 颜色、字体、样式

👀 示例:自定义颜色+暗黑模式
from nicegui import ui

dark = ui.dark_mode()
ui.label('主题切换:')
ui.button('黑色主题', on_click=dark.enable ,color="green")
ui.button('浅色主题', on_click=dark.disable ,color="red")

ui.run()

图片

图片

🌟 重点

  • color='xxx' 👉 改变组件颜色,如 redblue 等。

  • ui.dark_mode() 👉 一键切换 暗黑模式

💡 细节注意
有些组件不支持 color,但可以用 .style('background-color: xxx') 来手动调整!


8️⃣ Action & Events(用户交互)

NiceGUI 支持各种事件监听,如 点击、悬停、拖拽、键盘输入 等。

👀 示例:单击 + 鼠标悬停 + 键盘事件
from nicegui import ui  

def on_key(e):
    ui.notify(f'你按了 {e.key}')

ui.keyboard(on_key)


with ui.row():
    ui.button('A', on_click=lambda: ui.notify('你点击了按钮 A.'))
    ui.button('B').on('click', lambda: ui.notify('你点击了按钮 B.'))
with ui.row():
    ui.button('C').on('mousemove', lambda: ui.notify('鼠标移动到了 C 按钮上面了'))
    ui.button('D').on('mousemove', lambda: ui.notify('鼠标移动到了 D 按钮上面了'), throttle=0.5)

ui.run()

图片

🌟 重点

  • click 👉 监听单击事件。

  • mousemove 👉 监听鼠标悬停。

  • ui.keyboard(函数) 👉 监听键盘输入事件。

😂 有趣的地方
可以做个“精神测验”:如果用户按 F,就弹出 你真的有点东西!😂


9️⃣ Pages & Routing(多页面管理)

如果想要 多个页面,NiceGUI 也支持 路由功能

👀 示例:创建多个页面
from nicegui import ui  

@ui.page('/')
def main():
    ui.label('这是主页')
    ui.link('去设置页', '/settings')

@ui.page('/settings')
def settings():
    ui.label('这是设置页')
    ui.link('返回主页', '/')

ui.run()

图片

图片

🌟 重点

  • @ui.page('/路径') 👉 定义不同的页面。

  • ui.link('文本', '路径') 👉 创建页面跳转链接。

💡 细节注意
如果页面刷新后数据丢失,可以用 ui.storage 存储数据!


🔟 Configuration & Deployment(配置与部署)

NiceGUI 内置了 FastAPI 服务器,可以很方便地 部署到云端 或 打包成独立应用

👀 示例:修改端口号 + 部署
from nicegui import ui  

ui.label('Hello, NiceGUI!')
ui.run(host='0.0.0.0', port=8080)  # 指定端口

🌟 重点

  • host='0.0.0.0' 👉 让局域网设备访问。

  • port=8080 👉 指定端口,默认是 8080

💡 部署方式

  • 本地运行:直接 python app.py

  • 服务器部署:用 gunicorn 或 uvicorn 运行后端。

  • 打包成可执行文件exe: nicegui-pack --onefile --name "myapp" app.py


🎯 结语:NiceGUI 让 Python GUI 开发变得更简单!

写完这篇文章,我不得不感叹 NiceGUI 太香了!

  • ✅ 代码极简,比 PyQt、Tkinter 轻松 100 倍!

  • ✅ 界面美观,不需要前端基础,直接就是 Web 界面!

  • ✅ 功能强大,数据展示、交互控制、音视频播放一应俱全!

如果你也对 GUI 开发感兴趣,那就赶紧试试 NiceGUI 吧!🤩
想学习更多NiceGUI的内容可登录官网:https://nicegui.io/查看

 编程资料、学习路线图、源代码、软件安装包等!【点击这里免费领取】!  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值