NiceGUI 提供丰富的组件与布局选项,包括按钮、滑块、图表和 3D 元素。您可以将这些元素排布为行、列与卡片,无需编写 HTML 或 CSS。示例如下:
from nicegui import ui
with ui.column():
ui.button('Button 1')
ui.button('Button 2')with ui.row():with ui.card().style('width: 300px; height: 150px'):
ui.label('Temperature')
ui.slider(min=0,max=100, value=20)with ui.card().style('width: 500px; height: 400px'):# Adjusting the size of the card
ui.label('Line Chart')
ui.echart({'title':{'text':'Sample Line Chart','left':'center','textStyle':{'fontSize':18}},'xAxis':{'type':'category','data':['Category A','Category B','Category C'],'axisLabel':{'rotate':0}# Ensures the labels are not rotated},'yAxis':{'type':'value'},'series':[{'name':'Values','data':[1,2,3],'type':'line','smooth':True,# Makes the line smoother'label':{'show':True}# Shows data points on the chart}]})
ui.run()技术支持
import numpy as np
import matplotlib.pyplot as plt
from nicegui import ui
# Generate some data using NumPy
x = np.linspace(0,10,100)
y = np.sin(x)# Create a Matplotlib plot
plt.plot(x, y)
plt.title('Sine Wave')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')# Save the plot to display it in the web interface
plt.savefig('sine_wave_plot.png')# Define the NiceGUI interface@ui.page('/')defmain_page():# Display the plot using NiceGUI
ui.image('sine_wave_plot.png')# Run the NiceGUI application
ui.run()技术支持
使用 NiceGUI、Matplotlib 与 NumPy 创建的交互式图表。图片来源:作者。
高级特性与应用场景
您已经了解了 NiceGUI 的基础用法,下面来看看它的一些高级特性,帮助您构建更复杂、更具交互性的 Web 应用。
数据仪表板
除了基础布局,您还可以用 NiceGUI 构建展示实时数据的仪表板。可按以下思路实现:
使用 NiceGUI 在无需刷新页面的情况下更新屏幕上的数据。
通过 Matplotlib 或 Plotly 添加图表与可视化。
用按钮与下拉菜单让用户自定义所见内容。
例如,我使用 NiceGUI 与 Matplotlib 创建了一个展示实时股价的金融仪表板。
from nicegui import ui
import plotly.express as px
import pandas as pd
# Sample data
df = pd.DataFrame({'time':['10:00','10:05','10:10'],'stock_price':[100,102,105]})# Create a Plotly line chart
fig = px.line(df, x='time', y='stock_price', title='Stock Price Over Time')# Use NiceGUI to display the chartwith ui.card():
ui.plotly(fig)
ui.run()技术支持
from nicegui import ui
import numpy as np
import plotly.graph_objects as go
X = np.array([1,2,3,4,5])
y = np.array([1,6,8,7,9])# Slope and intercept
slope =2.2
intercept =0.6# Create the initial figure with two traces
fig = go.Figure()
fig.add_trace(go.Scatter(x=X, y=y, mode='markers', name='Data'))# Actual data points# The prediction line uses the manually set slope and intercept
y_pred = slope * X + intercept
fig.add_trace(go.Scatter(x=X, y=y_pred, mode='lines', name='Prediction'))
fig.update_layout(title='Linear Regression Model',
xaxis_title='X',
yaxis_title='Y',
height=400)defupdate_model():
y_pred = slope * X + intercept
# Update the results with the fixed slope and intercept
result.set_text(f"Slope: {slope:.2f}, Intercept: {intercept:.2f}")# Update the prediction line in the plot
chart.update_traces(y=y_pred, selector=dict(name="Prediction"))# Create the UIwith ui.card().classes('w-full'):
ui.label('Linear Regression Demo').classes('text-h6')
ui.button('Update Model', on_click=update_model).classes('my-2')
result = ui.label(f"Slope: {slope:.2f}, Intercept: {intercept:.2f}")
chart = ui.plotly(fig).classes('w-full')
ui.run()技术支持
NiceGUI 是一个基于 Python 的 UI 框架,可轻松创建网页界面。它允许开发者为 Web 应用构建图形用户界面(GUI),而无需掌握 HTML、CSS 或 JavaScript。
本文将讲解如何使用 NiceGUI 创建友好的用户界面。如果您是 Python 新手,建议先学习我们的Python 入门课程,再继续攻读Python 编程技能路径以夯实基础。
什么是 NiceGUI?
NiceGUI 是一个 Python 库,帮助您仅用 Python 代码创建基于 Web 的用户界面。如果您是 Python 开发者,想构建 UI 又想避开 HTML、CSS 或 JavaScript,那么 NiceGUI 就是为您准备的。它的底层由三项技术提供支持:
不过(这其实正是 NiceGUI 的要点),您并不需要理解这些技术也能高效使用 NiceGUI。它足够灵活,可胜任小型 Web 应用乃至更复杂的项目。这也是 NiceGUI 的一大优势——可达性强。即使您刚接触 Python,也能用极少的代码创建可用的界面。下面我们看段代码,我来展示一下我的意思。
NiceGUI 入门
这里我将介绍安装流程,并带您创建第一个简单应用。
安装流程
安装 NiceGUI 有多种方式,可按您的偏好选择。以下是具体做法。请在终端或命令提示符中运行下列命令。我根据常用工具分别给出选项。
通过 pip 安装
通过 PyPI 安装
通过 Docker 安装
通过 conda-forge 安装
首先,将
conda-forge添加到您的渠道列表:启用
conda-forge渠道后,运行以下命令安装 NiceGUI:第一个简单应用
安装完成后,就可以创建我们的第一个界面了。我们先看一个基础示例——显示一条简单的问候信息。先创建一个新的 Python 文件(例如
app.py),然后写入以下代码:现在运行代码。您可以保存后点击运行按钮执行,或在终端中输入以下命令:
使用 NiceGUI 显示标签。图片来源:作者。
NiceGUI 的关键特性
NiceGUI 因其简洁、交互性强以及集成能力而愈发受欢迎。下面概述其对开发者有用的特性。
用户友好的界面
与 Streamlit 或 Dash 等工具不同,您可以使用 NiceGUI 以极少的代码创建图形用户界面。示例如下:
在上述代码中,我定义了一个按钮并处理其点击事件。当我点击按钮时,会弹出消息button was pressed。就这么简单。虽然这不是最复杂的示例,但可以看到我无需配置或编写复杂逻辑,就快速搭建了一个可用的 UI。
带有按钮与通知的 NiceGUI 界面。图片来源:作者。
实时交互
借助 NiceGUI,您可以创建在浏览器中即时响应的实时交互式 UI。后端的更改会通过 WebSocket 连接立刻反映到前端。服务器与客户端之间持续通信,使您无需刷新页面即可看到更新。
当您移动滑块时,标签会即时更新且无需重新加载页面。这体现了 NiceGUI 相较于 Streamlit 和 Dash 等框架的优势——在这些框架中,实现更新可能需要更多工作。
创建滑块。图片来源:作者。
可视化元素与布局
NiceGUI 提供丰富的组件与布局选项,包括按钮、滑块、图表和 3D 元素。您可以将这些元素排布为行、列与卡片,无需编写 HTML 或 CSS。示例如下:
我使用这段代码创建了一个交互式布局。代码先从 NiceGUI 导入所需模块,然后创建一个包含两个按钮的列,以及一个包含两张卡片的行。第一张卡片是温度控制区,有标签和用于调节温度的滑块。第二张卡片包含折线图。最后通过
ui.run()运行并显示结果。创建可视化元素与布局。图片来源:作者。
与外部库集成
如果您从事数据科学或可视化,有个好消息——NiceGUI 能很好地与 NumPy、Matplotlib、Plotly 等主流 Python 库配合使用。比如您在做需要复杂数据处理或可视化的数据科学项目,此时依旧可以像平时那样在 Python 中使用这些库,NiceGUI 会在基于 Web 的界面中为您展示结果。
下面示例展示了如何将 NiceGUI 与 Matplotlib、NumPy 组合,用于在网页界面中创建基础数据可视化。首先运行以下命令安装所需库:
接着创建一个简单的 Python 脚本,生成图像并用 NiceGUI 展示:
使用 NiceGUI、Matplotlib 与 NumPy 创建的交互式图表。图片来源:作者。
高级特性与应用场景
您已经了解了 NiceGUI 的基础用法,下面来看看它的一些高级特性,帮助您构建更复杂、更具交互性的 Web 应用。
数据仪表板
除了基础布局,您还可以用 NiceGUI 构建展示实时数据的仪表板。可按以下思路实现:
例如,我使用 NiceGUI 与 Matplotlib 创建了一个展示实时股价的金融仪表板。
您还可以将应用连接到流式数据的 API。借助 Matplotlib 或 Plotly 自动刷新图表,随着新数据到来即时更新,为用户提供实时的市场视图。
机器学习界面
NiceGUI 也非常适合机器学习项目。您可以这样用它:
例如,我为线性回归创建了一个界面:
将 NiceGUI 集成到机器学习中。图片来源:作者。
NiceGUI 与其他 Python UI 框架对比
启动新项目时,您可能会将 NiceGUI 与 Streamlit、Dash、JustPy 等流行替代方案进行比较。每个框架都有其优缺点,会影响项目开发。下面我们从易用性与性能角度做个比较。
应用构建完成后,您会希望与他人分享。部署能让用户在互联网上或本地网络访问您的应用。由于 NiceGUI 应用基于 Python,您有多种部署选项。
云端部署选项
您可以选择 Google Cloud Run 或 AWS——两种最受欢迎的云端部署方式。以下是在这些平台上部署应用的基本步骤:
具体流程会因平台不同而略有差异,但几乎所有云平台都提供易用的界面与 CLI 工具,即便是云托管新手也能顺利完成。
Docker 支持
Docker 允许您将应用及其依赖打包进单个容器,便于在任意支持 Docker 的系统上部署。NiceGUI 同样提供官方 Docker 镜像,十分适合容器化部署,并能为您抽象掉大量部署复杂度。
该Docker 镜像包含所有必要依赖,确保开发与生产环境的一致性。当然,您也可以基于官方镜像扩展,加入应用所需的其他依赖。一般部署流程包括以下步骤:
结论
NiceGUI 是一个易用、支持实时交互、且可与其他主流库配合使用的 Python 框架。无论是小型项目还是大型项目,NiceGUI 都是不错的选择。
想进一步了解 GUI 如何塑造工作的未来,请查看《GUI 与工作的未来》教程。如果您正在开发 AI 应用并寻找另一种构建用户界面的方案,请参阅这篇教程:使用 Gradio 在 Python 中为 AI 应用构建用户界面。