NiceGUI .props() 完整列表教程
.props() 是 NiceGUI 中最强大的底层控制方法,用于设置 Quasar 组件的原生属性。
1. 基础语法
# 单个属性
element.props('flat')
# 多个属性(空格分隔)
element.props('flat color=primary size=lg')
# 布尔属性(直接写属性名)
element.props('disable readonly')
# 带特殊字符的值(用引号包裹)
element.props('placeholder="请输入内容..." rules="[val => val.length > 0]"')
2. 按组件分类的 Props 列表
🔵 按钮 Button
| Props | 说明 | 示例 |
|---|---|---|
flat | 扁平样式 | .props('flat') |
outline | 轮廓样式 | .props('outline') |
push | 按压效果 | .props('push') |
round | 圆形 | .props('round') |
glossy | 光泽效果 | .props('glossy') |
size=xs|sm|md|lg|xl | 尺寸 | .props('size=lg') |
color=primary|red|... | 背景色 | .props('color=red-5') |
text-color=white|black | 文字色 | .props('text-color=white') |
icon=edit|delete|... | 图标 | .props('icon=edit') |
loading | 加载状态 | .props('loading') |
disable | 禁用 | .props('disable') |
ripple | 涟漪效果 | .props('ripple') |
示例:
ui.button('保存').props('icon=save color=positive size=lg outline')
🟦 输入框 Input
| Props | 说明 | 示例 | ||
|---|---|---|---|---|
outlined | 轮廓边框 | .props('outlined') | ||
filled | 填充背景 | .props('filled') | ||
borderless | 无边框 | .props('borderless') | ||
standout | 突出样式 | .props('standout') | ||
disable | 禁用 | .props('disable') | ||
readonly | 只读 | .props('readonly') | ||
loading | 加载中 | .props('loading') | ||
clearable | 可清空 | .props('clearable') | ||
dense | 紧凑模式 | .props('dense') | ||
prefix=前缀 | 前缀文本 | .props('prefix=$') | ||
suffix=后缀 | 后缀文本 | .props('suffix=@email.com') | ||
placeholder="..." | 占位符 | .props('placeholder="搜索..."') | ||
type=password|email|... | 输入类型 | .props('type=password') | ||
rules="[...]" | 验证规则 | `.props('rules="[val => !!val | '必填']"')` |
示例:
ui.input('邮箱').props('outlined placeholder="user@example.com" suffix=@email.com')
🟩 选择器 Select
| Props | 说明 | 示例 |
|---|---|---|
outlined | 轮廓边框 | .props('outlined') |
filled | 填充背景 | .props('filled') |
use-chips | 标签式显示 | .props('use-chips') |
multiple | 多选模式 | .props('multiple') |
use-input | 可搜索 | .props('use-input') |
clearable | 可清空 | .props('clearable') |
dense | 紧凑模式 | .props('dense') |
options-dense | 选项紧凑 | .props('options-dense') |
示例:
ui.select(['A', 'B', 'C']).props('multiple use-chips outlined')
🟨 复选框/单选 Checkbox/Radio
| Props | 说明 | 示例 |
|---|---|---|
indeterminate | 半选状态 | .props('indeterminate') |
toggle | 切换开关样式 | .props('toggle') |
color=positive|red | 颜色 | .props('color=positive') |
size=xs|sm|md|lg|xl | 尺寸 | .props('size=lg') |
disable | 禁用 | .props('disable') |
示例:
ui.checkbox('同意').props('toggle color=positive')
🟧 卡片 Card
| Props | 说明 | 示例 |
|---|---|---|
flat | 无阴影 | .props('flat') |
bordered | 有边框 | .props('bordered') |
square | 直角 | .props('square') |
dark | 暗色模式 | .props('dark') |
elevation=0-24 | 阴影深度 | .props('elevation=3') |
示例:
ui.card().props('flat bordered').classes('p-4')
🟥 对话框 Dialog/Notification
| Props | 说明 | 示例 |
|---|---|---|
position=top|right|bottom|left | 位置 | .props('position=top') |
color=positive|negative | 颜色 | .props('color=positive') |
icon=check_circle | 图标 | .props('icon=check_circle') |
timeout=3000 | 自动关闭时间(ms) | .props('timeout=3000') |
message="..." | 消息内容 | .props('message="操作成功"') |
multi-line | 多行显示 | .props('multi-line') |
示例:
ui.notify('保存成功!').props('position=top-right color=positive icon=check_circle timeout=2000')
🟪 布局与分隔
| Props | 说明 | 示例 |
|---|---|---|
gutter-x-xs|sm|md|lg|xl | 水平间距 | .props('gutter-x-md') |
gutter-y-xs|sm|md|lg|xl | 垂直间距 | .props('gutter-y-sm') |
spaced | 均匀间隔 | .props('spaced') |
inset | 缩进分隔线 | .props('inset') |
vertical | 垂直分隔 | .props('vertical') |
示例:
ui.row().props('gutter-x-md gutter-y-sm')
3. 动态修改 Props
btn = ui.button('提交')
# 运行时添加属性
btn.props('loading') # 变为加载状态
# 运行时移除属性
btn.props('remove loading') # 移除加载状态
# 替换所有 props
btn.props('flat color=red') # 覆盖之前的 props
# 获取当前 props
print(btn.props) # 输出: flat color=red
4. Props vs Classes vs Style
| 方法 | 作用 | 优先级 | 使用场景 |
|---|---|---|---|
.props() | 控制组件行为和类型 | 低 | 改变按钮样式、输入框类型、验证规则 |
.classes() | 控制布局和外观 | 中 | 调整边距、颜色、字体大小 |
.style() | 精细微调 | 高 | 自定义圆角、阴影、动画 |
协作示例
ui.button('保存').props('icon=save color=primary').classes('px-6 py-2').style('border-radius: 8px; font-weight: 600')
5. 高级技巧
A. 条件 Props
is_loading = True
btn = ui.button('提交')
if is_loading:
btn.props('loading disable')
else:
btn.props('remove loading remove disable')
B. 字典转 Props
props_dict = {
'color': 'primary',
'size': 'lg',
'flat': True # 布尔值直接写
}
props_str = ' '.join([f'{k}={v}' if not isinstance(v, bool) else k for k, v in props_dict.items()])
ui.button('动态').props(props_str)
C. 验证规则 Props
ui.input('密码').props('type=password rules="[val => val.length >= 8 || \'至少8位\']"')
6. 常见 Props 值参考
颜色系统(Quasar 标准)
primary,secondary,accentpositive,negative,info,warningred-1到red-14,blue-1到blue-14, 等dark,light
尺寸系统
xs(12px),sm(14px),md(16px),lg(20px),xl(24px)
位置
top,right,bottom,lefttop-left,top-right,bottom-left,bottom-right
7. 调试与查找
快速调试
# 在浏览器控制台查看实际渲染的元素
# 1. 右键点击元素 -> 检查
# 2. 查看 class 和 data-v-* 属性
# 3. 这些就是 props 的实际效果
查找可用 Props
- Quasar 官方文档: quasar.dev/vue-compone…
- 浏览器 DevTools: 查看渲染后的 HTML 属性
- NiceGUI 源码:
nicegui/elements/目录下的组件定义
8. 实战完整示例
from nicegui import ui
# 复杂表单
with ui.card().props('flat bordered'):
ui.label('用户注册').props('text-h5').classes('mb-4')
ui.input('用户名').props(
'outlined dense rules="[val => val.length > 0 || \'必填\']" placeholder="输入用户名"'
).classes('w-full mb-2')
ui.input('邮箱').props(
'outlined dense type=email placeholder="user@example.com" suffix=@email.com'
).classes('w-full mb-2')
ui.select(['男', '女', '其他']).props(
'outlined dense use-chips'
).classes('w-full mb-4')
with ui.row().props('gutter-x-sm'):
ui.button('提交').props('color=positive outline size=lg')
ui.button('取消').props('color=negative flat')
ui.checkbox('同意协议').props('toggle color=primary')
ui.run()
总结:.props() 是连接 NiceGUI 和 Quasar 的桥梁,掌握它能让你的 UI 更专业、更灵活!