代码:
from nicegui import ui
# 创建一个全宽度的列容器,包含内边距
with ui.column().classes('w-full p-6'):
# 标题行:包含图标和标题
with ui.row().classes('items-center mb-8').props('align-items: center'):
# 仪表盘图标,蓝色,大小3xl,右边距
ui.icon('dashboard').classes('text-3xl text-blue-600 mr-3')
# 标题文本:系统概览,大小2xl,粗体
ui.label('系统概览').classes('text-2xl font-bold')
# 卡片容器:使用flex布局,卡片间有间距,允许换行
with ui.row().classes('gap-6 flex-wrap'):
# 循环创建三个统计卡片
# 每个卡片的数据:标题、数量、图标、渐变色起始颜色、渐变色结束颜色
for title, count, icon, color1, color2 in [
# 待处理卡片:橙色渐变,5条记录
('待处理', 5, 'access_time', '#ff9800', '#ff5722'),
# 维修中卡片:蓝色渐变,3条记录
('维修中', 3, 'build', '#2196f3', '#1976d2'),
# 已完成卡片:绿色渐变,12条记录
('已完成', 12, 'check_circle', '#4caf50', '#2e7d32')
]:
# 创建卡片,使用135度渐变背景色
with ui.card().style(f'background: linear-gradient(135deg, {color1}, {color2});'):
# 卡片内容容器:垂直居中,白色文字
with ui.column().classes('items-center text-white'):
# 图标:大小4xl,底部间距
ui.icon(icon).classes('text-4xl mb-2')
# 标题:大小lg,粗体,底部间距
ui.label(title).classes('text-lg font-semibold mb-1')
# 数量:大小5xl,粗体,垂直间距
ui.label(str(count)).classes('text-5xl font-bold my-2')
# 单位文字:小号,90%透明度
ui.label('条记录').classes('text-sm opacity-90')
# 运行NiceGUI应用
# host='0.0.0.0':允许所有网络接口访问
# port=8087:使用8087端口
# title='维修登记系统':浏览器标签页标题
ui.run(host='0.0.0.0', port=8087, title='维修登记系统')
代码结构说明:
1. 布局结构
ui.column():垂直布局容器ui.row():水平布局容器with语句:用于创建嵌套的UI元素
2. CSS类说明
w-full:宽度100%p-6:内边距1.5rem(24px)items-center:垂直居中mb-8:底部边距2rem(32px)gap-6:元素间距1.5rem(24px)flex-wrap:允许换行text-3xl:字体大小1.875rem(30px)text-blue-600:蓝色文字mr-3:右边距0.75rem(12px)
3. 卡片设计特点
-
渐变背景:135度角渐变,从浅色到深色
-
颜色主题:
- 橙色系:待处理状态
- 蓝色系:进行中状态
- 绿色系:完成状态
-
文字统一:所有文字为白色,确保在深色背景上可读
-
层次分明:图标>标题>数量>单位,大小递减
4. 图标说明
dashboard:Material Design的仪表盘图标access_time:时钟图标,表示待处理build:工具图标,表示维修中check_circle:对勾圆圈图标,表示已完成
5. 响应式特性
flex-wrap:当屏幕宽度不足时,卡片会自动换行- 卡片采用弹性宽度,适应不同屏幕尺寸
这段代码创建了一个简洁美观的系统概览仪表盘,包含三个状态统计卡片,适合用于维修管理、任务跟踪等场景。