基于nicegui库在浏览器中创建一个浮动窗口

前一阵在github上看到一个不错的基于浏览器的python GUI 项目,https://github.com/zauberzeug/nicegui,用了一下,感觉不错,可以用python来开发B/S架构的服务端程序,

NiceGUI is an easy-to-use, Python-based UI framework, which shows up in your web browser. You can create buttons, dialogs, Markdown, 3D scenes, plots and much more.

前一阵用pyqt开发过一个C/S架构的监控程序,现在想着能否基于nicegui开发一个B/S架构的监控程序。

监控程序中用到了弹出浮动窗口,nicegui默认没有提供浮动窗口控件,自己照着nicegui控件写了一个浮动窗口的类FloatWindow,可以实现在浏览其中弹出可定制化的浮动窗口。

# with FloatWindow('浮动窗口演示', content="This is a float window Demo, just show ..."):
#     ui.image('/images/cat_card.png').classes('w-full h-[320px]')

fw:FloatWindow = None

def promtWindow():
    counter = 0
    def showit():
        global fw
        nonlocal counter
        counter += 1
        if fw is None:
            with (fw := FloatWindow(f'浮动窗口演示-{counter}', content=f'<span style="color: red">This is a float window Demo{counter}</span>, just show ...')):
                 ui.label("1. xxxxx")
                 ui.image('/images/cat_card.png').classes('min-w-full h-[320px] resize')
        else:
            fw.updateTitle(f'浮动窗口演示-{counter}')
            if counter == 4:
                fw.updateContent()
            else:
                fw.updateContent(f'<span style="color: red">This is a float window Demo{counter}</span>, just show ...')
            fw.update()
    return showit



ui.button('Reset', on_click=counter.reset).props('small outline')
with ui.card():
    ui.button("FloatWindow", on_click=promtWindow()).props('small outline')
    with ui.row():
        ui.button("Hide", on_click=lambda:fw.hide())
        ui.button("Show", on_click=lambda:fw.show())

ui.run()

 基于nicegui创建浮动窗口

### NiceGUI 的简介 NiceGUI 是一种基于 Python 的用户界面框架,能够轻松构建运行于 Web 浏览器中的图形化用户界面 (GUI)[^3]。它的设计目标是提供简单易用的 API 和灵活的功能组合,使得开发者无需深入掌握前端技术即可快速实现交互式应用程序。 --- ### 安装与使用教程 为了开始使用 NiceGUI,可以通过 pip 巛包管理工具进行安装: ```bash pip install nicegui ``` 安装完成后,可以按照以下代码示例创建一个简单的 GUI 应用程序: ```python from nicegui import ui def greet(): name = name_input.value or 'World' ui.notify(f'Hello {name}!') with ui.card().classes('w-full max-w-300 mx-auto'): with ui.column().classes('items-center'): name_input = ui.input('Your name').props('autofocus') ui.button('Greet', on_click=greet) ui.run() ``` 上述代码展示了如何定义输入框、按钮以及通知消息等功能组件[^2]。通过 `ui.run()` 方法启动服务器后,在浏览器中访问指定地址即可查看效果。 --- ### 功能特性概述 #### 基本功能模块 1. **UI 组件**: 提供丰富的内置控件支持,例如按钮 (`ui.button`)、滑动条 (`ui.slider`)、表格 (`ui.table`) 等。 2. **事件处理机制**: 支持绑定回调函数至特定操作(如点击或拖拽),从而动态响应用户的互动行为。 3. **样式定制能力**: 利用 Tailwind CSS 实现高度自定义外观布局的可能性;同时也允许直接嵌入 HTML/CSS/JavaScript 片段扩展原生表现力。 4. **多媒体集成选项**: 能够加载图片资源或者播放音频视频文件,并且兼容 Markdown 渲染语法用于富文本展示。 5. **高级视觉呈现手段**: 包含 Three.js 集成接口以便制作复杂的三维模型视图,还有 Plotly 插件辅助统计图表绘制工作。 #### 场景适用范围 由于其轻量级特性和跨平台属性,特别适合应用于如下领域: - 小型独立网站建设; - 数据监控面板维护; - 教育培训演示材料准备; - 科研实验原型验证环境部署等等[^3]。 尽管官方文档存在一定程度上的混乱状况[^1],不过随着社区贡献者的增多和技术积累加深,越来越多高质量指南陆续涌现出来弥补这一缺陷。 --- ### 开发建议 针对初次接触该的新手而言,可以从模仿现有案例起步逐步熟悉各项核心概念并不断试验调整直至熟练运用为止。同时积极参与讨论区交流心得也有助于加速成长过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值