NiceGUI之Button操作(ElementPlus组件库)

1、效果预览

2、代码

python 复制代码
from nicegui import app, ui

ui.add_body_html('''
    <link rel="stylesheet" href="//unpkg.com/element-plus/dist/index.css" />
    <script defer src="https://unpkg.com/element-plus"></script>
''')
app.config.vue_config_script += '''
    app.use(ElementPlus);
'''
SHARE = """
<svg  xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><path fill="currentColor" d="m679.872 348.8-301.76 188.608a127.8 127.8 0 0 1 5.12 52.16l279.936 104.96a128 128 0 1 1-22.464 59.904l-279.872-104.96a128 128 0 1 1-16.64-166.272l301.696-188.608a128 128 0 1 1 33.92 54.272z"></path></svg>
"""
TURNOFF = """
<svg  xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><path fill="currentColor" d="M329.956 257.138a254.862 254.862 0 0 0 0 509.724h364.088a254.862 254.862 0 0 0 0-509.724zm0-72.818h364.088a327.68 327.68 0 1 1 0 655.36H329.956a327.68 327.68 0 1 1 0-655.36"></path><path fill="currentColor" d="M329.956 621.227a109.227 109.227 0 1 0 0-218.454 109.227 109.227 0 0 0 0 218.454m0 72.817a182.044 182.044 0 1 1 0-364.088 182.044 182.044 0 0 1 0 364.088"></path></svg>
"""
SWITCH = """
<svg  xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><path fill="currentColor" d="M118.656 438.656a32 32 0 0 1 0-45.248L416 96l4.48-3.776A32 32 0 0 1 461.248 96l3.712 4.48a32.064 32.064 0 0 1-3.712 40.832L218.56 384H928a32 32 0 1 1 0 64H141.248a32 32 0 0 1-22.592-9.344M64 608a32 32 0 0 1 32-32h786.752a32 32 0 0 1 22.656 54.592L608 928l-4.48 3.776a32.064 32.064 0 0 1-40.832-49.024L805.632 640H96a32 32 0 0 1-32-32"></path></svg>
"""
with ui.row():
    ui.markdown("##### 不同颜色的按钮:")
    with ui.element('el-button').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('type="primary"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('type="success"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('type="info"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('type="warning"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('type="danger"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)

with ui.row():
    ui.markdown("##### 带图标+文字按钮:")
    ui.link('图标合集', 'https://element-plus.org/zh-CN/component/icon#icon-collection')
    with ui.element('el-button').props('type="danger"').on('click', lambda: ui.notify('Hi!')):
        with ui.element('el-icon').props('size="18"'):
            ui.html(SHARE, sanitize=False).style('margin-right:5px')
        ui.html('Element Plus button', sanitize=False)

    with ui.element('el-button').props('type="warning"').on('click', lambda: ui.notify('Hi!')):
        with ui.element('el-icon').props('size="18"'):
            ui.html(TURNOFF, sanitize=False).style('margin-right:5px')
        ui.html('Element Plus button', sanitize=False)

    with ui.element('el-button').props('type="info"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
        with ui.element('el-icon').props('size="18"'):
            ui.html(SWITCH, sanitize=False).style('margin-left:8px')

    with ui.element('el-button').props('type="success"').on('click', lambda: ui.notify('Hi!')):
        with ui.element('el-icon').props('size="18"'):
            ui.html(TURNOFF, sanitize=False).style('margin-right:5px')
        ui.html('Element Plus button', sanitize=False)
        with ui.element('el-icon').props('size="18"'):
            ui.html(SWITCH, sanitize=False).style('margin-left:8px')

with ui.row():
    ui.markdown("##### plain样式按钮:")
    with ui.element('el-button').props('plain').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('plain').props('type="primary"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('plain').props('type="success"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('plain').props('type="info"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('plain').props('type="warning"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('plain').props('type="danger"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)

with ui.row():
    ui.markdown("##### round样式按钮:")
    with ui.element('el-button').props('round').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('round').props('type="primary"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('round').props('type="success"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('round').props('type="info"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('round').props('type="warning"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)

with ui.row():
    ui.markdown("##### 图标按钮:")
    with ui.element('el-button').props('type="info"').props('circle').on('click', lambda: ui.notify('Hi!')):
        with ui.element('el-icon').props('size="18"'):
            ui.html(SHARE, sanitize=False)
    with ui.element('el-button').props('type="primary"').props('circle').on('click', lambda: ui.notify('Hi!')):
        with ui.element('el-icon').props('size="18"'):
            ui.html(TURNOFF, sanitize=False)
    with ui.element('el-button').props('type="danger"').props('circle').on('click', lambda: ui.notify('Hi!')):
        with ui.element('el-icon').props('size="18"'):
            ui.html(SWITCH, sanitize=False)

with ui.row():
    ui.markdown("##### 禁用按钮:")
    with ui.element('el-button').props('disabled').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('disabled').props('type="primary"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)

with ui.row():
    ui.markdown("##### 链接按钮:")
    with ui.element('el-button').props('link').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('link').props('type="primary"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)

with ui.row():
    ui.markdown("##### 按钮组:")
    with ui.element('el-button-group'):
        with ui.element('el-button').on('click', lambda: ui.notify('Hi!')):
            ui.html('Element Plus button', sanitize=False)
        with ui.element('el-button').props('type="primary"').on('click', lambda: ui.notify('Hi!')):
            ui.html('Element Plus button', sanitize=False)
with ui.row():
    ui.markdown("##### 不同大小按钮:")
    with ui.element('el-button').props('type="primary"').props('size="small"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('type="info"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)
    with ui.element('el-button').props('type="success"').props('size="large"').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)

with ui.row():
    ui.markdown("##### loading按钮:")
    with ui.element('el-button').props('loading').on('click', lambda: ui.notify('Hi!')):
        ui.html('Element Plus button', sanitize=False)

    async def change_loading(bt,text):
        import asyncio
        # 设置为加载状态
        bt.props(":loading=true")
        # 修改按钮文本为"加载中..."
        text.content = "加载中..."
        await asyncio.sleep(5)
        # 取消加载状态
        bt.props(":loading=false")
        # 修改按钮文本为"点击后loading 5s"
        text.content = "点击后loading 5s"

    # 设置按钮文案
    with ui.element('el-button').props('type="primary"') as f:
        bt_text_element = ui.html('点击后loading 5s', sanitize=False)
        # 绑定点击事件
        f.on('click', lambda: change_loading(f,bt_text_element))

ui.run(port=8888)
相关推荐
Learn-Python1 小时前
MongoDB-only方法
python·sql
小途软件2 小时前
用于机器人电池电量预测的Sarsa强化学习混合集成方法
java·人工智能·pytorch·python·深度学习·语言模型
扫地的小何尚3 小时前
NVIDIA RTX PC开源AI工具升级:加速LLM和扩散模型的性能革命
人工智能·python·算法·开源·nvidia·1024程序员节
wanglei2007083 小时前
生产者消费者
开发语言·python
清水白石0084 小时前
《从零到进阶:Pydantic v1 与 v2 的核心差异与零成本校验实现原理》
数据库·python
昵称已被吞噬~‘(*@﹏@*)’~4 小时前
【RL+空战】学习记录03:基于JSBSim构造简易空空导弹模型,并结合python接口调用测试
开发语言·人工智能·python·学习·深度强化学习·jsbsim·空战
2501_941877984 小时前
从配置热更新到运行时自适应的互联网工程语法演进与多语言实践随笔分享
开发语言·前端·python
酩酊仙人4 小时前
fastmcp构建mcp server和client
python·ai·mcp
且去填词5 小时前
DeepSeek API 深度解析:从流式输出、Function Calling 到构建拥有“手脚”的 AI 应用
人工智能·python·语言模型·llm·agent·deepseek
rgeshfgreh5 小时前
Python条件与循环实战指南
python