nicegui太香了,跨平台开发和跨平台运行--使用Python+nicegui实现系统布局界面的开发
在现今国产化浪潮的驱动下,跨平台或者缩小范围说基于国产化Linux或者基于国产鸿蒙系统的开发才是未来的趋势了,风口浪尖上,我们开发人员也只能顺势而为,本篇随笔介绍在Python开发中,使用使用Python+nicegui实现系统布局界面的开发。
1、Nicegui的介绍和应用需求
我们先来介绍一个比较新兴的一个界面组件 nicegui 的资源:
nicegui的官网:https://nicegui.io/documentation
Github地址:https://github.com/zauberzeug/nicegui
它是一个可以创建基于服务器端运行的BS前端,也可以是一个独立运行的程序,类似Electron(https://www.electronjs.org/) 的独立运行程序。根据编译的方式不同,生成不同的文件。
我在随笔《基于Python后端构建多种不同的系统终端界面研究》中大致介绍了一下该组件的使用效果,其实主要优势就是能够利用Python跨平台的开发和部署运行能力,并结合nicegui能够编译独立App或者桌面程序,或者基于服务端的BS管理系统,皆可以一气呵成,一套代码按需发布不同的UI即可。
另外朋友有需要,要我为其AI模块的中控系统做一套管理各个终端设备的终端,要求使用这个nicegui来实现。一个小盒子Orange Pi 跑ubuntu的设备,还很顺滑。
2、系统界面和布局和模块化页面处理
基于这样的需求,我们可以先做一套管理面板来实现一些功能入口,首先有一个登录的界面,然后一个布局界面进行处理即可.
接着就是设计一个主要框架的布局页面,如下所示。
如果主体框架是模块的页面管理,那么剩下的就是我们根据不同的需求设计不同的页面,放置在目录下即可,根据需要添加所需的菜单。
例如,我们在main.py入口页面上,可以添加模块的路由处理,如下所示。
# 首页显示
@ui.page("/")
def index_page() -> None:
with theme.frame("Homepage"):
home.content() login.create_page() # 登录页面 # 使用APIRouter路由处理,每个模块独立一个路由
# 参考文档: https://nicegui.io/documentation/page#modularize_with_apirouter
app.include_router(example.router)
app.include_router(customer.router)
这样我们把Home页面、Login页面路由、其他页面路由都一并处理好,我们还可以优化一下,把路由放在一个独立的文件如router.api中实现统一管理页面的路由处理。
#router.py from nicegui import app, ui
import pages.example as example
import pages.home as home
import pages.customer as customer
import pages.login as login # 使用APIRouter路由处理,每个模块独立一个路由
# 参考文档: https://nicegui.io/documentation/page#modularize_with_apirouter
def init_routes():
"""初始化系统的路由"""
app.include_router(home.router) # 首页显示
app.include_router(login.router) # 登录页面
app.include_router(example.router) # 示例页面
app.include_router(customer.router) # 客户页面 # ............其他页面
统一处理路由信息后,那么main.py的代码就可以优化如下所示。
from nicegui import app, ui, language
import router as router
from auth_middleware import AuthMiddleware router.init_routes() # 初始化路由
app.add_middleware(AuthMiddleware) # 自定义中间件,处理登录验证
app.add_static_files("/public", "public") # 添加静态文件目录 # 启动运行,并设置全局语言配置为中文
ui.run(
title="企业信息化平台-广州爱奇迪软件科技有限公司",
language="zh-CN",
storage_secret="THIS_NEEDS_TO_BE_CHANGED",
)
通过直接调用 init_routes 来处理路由即可。
测试一个简单的表格查询页面处理,如下所示。
可以打开或者折叠行的定义信息。
主要通过ui.table和slot来实现多种表格的处理效果。
# 表格
table = ui.table(
columns=columns,
rows=rows,
title="客户列表",
pagination=10,
row_key="name",
selection="single",
on_pagination_change=lambda e: ui.notify(e.value),
)
折叠信息我们通过下面的Slot处理展示。
table.add_slot(
"body",
r"""
<q-tr :props="props">
<q-td auto-width>
<q-btn size="sm" color="accent" round dense
@click="props.expand = !props.expand"
:icon="props.expand ? 'remove' : 'add'" />
</q-td>
<q-td v-for="col in props.cols" :key="col.name" :props="props">
{{ col.value }}
</q-td>
</q-tr>
<q-tr v-show="props.expand" :props="props">
<q-td colspan="100%">
<div class="text-left" >
<div class="text-primary line-clamp-1 text-base tracking-wide" v-for="col in props.cols" :key="col.name">{{col.label}}: {{col.value}}</div>
</div>
</q-td>
</q-tr>
""",
)
我们也可以采用 nicegui_tabulator 第三方组件来丰富表格的处理效果。
Githhub地址:https://github.com/CrystalWindSnake/nicegui-tabulator
案例代码:
from nicegui_tabulator import tabulator, use_theme
from nicegui import ui
# use the theme for all clients
# use_theme("bootstrap4") tabledata = [
{"id": 1, "name": "Oli Bob", "age": "12", "col": "red", "dob": ""},
{"id": 2, "name": "Mary May", "age": "1", "col": "blue", "dob": "14/05/1982"}
]
table_config = {
"height": 205,
"layout": "fitDataFill",
"pagination": "local",
"paginationSize": 10,
"movableColumns": True,
"resizableRows": True,
"data": tabledata,
"columns": [
{"title": "Name", "field": "name", "width": 150, "headerFilter": "input"},
{"title": "Age", "field": "age", "hozAlign": "left", "formatter": "progress"},
{"title": "Favourite Color", "field": "col"},
{
"title": "Date Of Birth",
"field": "dob",
"sorter": "date",
"hozAlign": "center",
},
],
} table = tabulator(table_config).on_event("rowClick", lambda e: ui.notify(e))
界面效果如下:
根据需要我们可以整合更多的相关界面下效果,这样可以跨平台的运行在各个应用上,非常方便。
nicegui太香了,跨平台开发和跨平台运行--使用Python+nicegui实现系统布局界面的开发的更多相关文章
- Android深度探索HAL和驱动开发(卷1) 第一章 Android系统移植和驱动开发
由于Android是基于Linux内核的,因此,Android和其他Linux系统的核心部分差异非常小.然而不同版本的Android使用的Linux内核的版本有细微的差异,所以不同Android驱动可 ...
- 使用electron+vue开发一个跨平台todolist(便签)桌面应用
# 1 最近一直在使用electron开发桌面应用,对于一个web开发者来说,html+javascript+css的开发体验让我非常舒服.之前我一直简单的以为electron只是张网页加个壳,和那些 ...
- 拥抱.NET Core,如何开发一个跨平台类库 (1)
在此前的文章中详细介绍了使用.NET Core的基本知识,如果还没有看,可以先去了解“拥抱.NET Core,学习.NET Core的基础知识补遗”,以便接下来的阅读. 在本文将介绍如何配置类库项目支 ...
- 利用C#开发移动跨平台Hybrid App(一):从Native端聊Hybrid的实现
0x00 前言 前一段时间分别读了两篇博客,分别是叶小钗兄的<浅谈Hybrid技术的设计与实现>以及徐磊哥的<从技术经理的角度算一算,如何可以多快好省的做个app>.受到了很多 ...
- 十分钟使用ionic Framework开发一个跨平台移动应用
Ionic是一个前端的框架,帮助开发人员使用HTML5, CSS3和JavaScript做出原生应用. ionic的理念类似前端开发的BootStrap,目标是封装HTML5移动跨平台开发的最佳实践. ...
- 使用 JavaScript开发的跨平台音乐、书籍播放器
代码地址如下:http://www.demodashi.com/demo/12542.html 演示效果 歌曲推荐界面 歌手搜索界面 歌词预览界面 书籍推荐界面 代码实现过程 首页代码: 'use s ...
- Python自动化运维开发实战 一、初识Python
导语 都忘记是什么时候知道python的了,我是搞linux运维的,早先只是知道搞运维必须会shell,要做一些运维自动化的工作,比如实现一些定时备份数据啊.批量执行某个操作啊.写写监控脚本什么的. ...
- 用Python作GIS之二:STARS开发环境配置
STARS的一般使用可以通过REGAL网页快速学习http://regionalanalysislab.org/?n=STARS再次不做详细介绍这里关注的主题是对STARS源代码分析即为使用Pytho ...
- 第一模块·开发基础-第1章 Python基础语法
Python开发工具课前预习 01 Python全栈开发课程介绍1 02 Python全栈开发课程介绍2 03 Python全栈开发课程介绍3 04 编程语言介绍(一) 05 编程语言介绍(二)机器语 ...
- 为什么我建议每个开发人员都需要学Python?
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://dzone.com/articles/10-reasons-why-every-d ...
随机推荐
- 字符串系列目录&&说明
字符串准备写成一个系列. 目录 \(\text{KMP笔记}\) \(\text{Manacher笔记}\) [] [] [] 格式与说明 下面的说明和格式将被应用于整个系列. 说明 所有字符串的下标 ...
- Apache DolphinScheduler 社区 3 月月报
各位热爱 DolphinScheduler 的小伙伴们,DolphinScheduler 社区月报开始更新啦!这里将记录 DolphinScheduler 社区每月的重要更新. 社区为 Dolphin ...
- 为了落地DDD,我是这样“PUA”大家的
本文书接上回<先有鸡还是先有蛋?这是领域驱动设计落地最大的困局> https://mp.weixin.qq.com/s/lzAZXgchCg_VyLmyo2N18Q 故事背景 2023 ...
- 【牛客刷题】HJ4 字符串分隔
题目链接 这个题目本身基本上是对语言熟悉程度的考察,没有什么别的逻辑可言: package main import ( "fmt" "strings" ) fu ...
- 信创环境:鲲鹏ARM+麒麟V10离线部署K8s和Rainbond信创平台
在上篇<国产化信创开源云原生平台>文章中,我们介绍了 Rainbond 作为可能是国内首个开源国产化信创平台,在支持国产化和信创方面的能力,并简要介绍了如何在国产化信创环境中在线部署 Ku ...
- 痞子衡嵌入式:英飞凌MirrorBit工艺NOR Flash的扇区架构设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是英飞凌MirrorBit工艺NOR Flash的扇区架构设计. NOR Flash 大家都很熟悉,其内部按组织从小到大分为 Page(12 ...
- Polly服务熔断
//自定义异常 public class MyException : Exception { public MyException(string? message) : base(message) { ...
- 关于人工智能的思考,写在chatGPT爆火之时
今天是2023年3月22日,今天思维比较活跃,故作文一篇,以记录当下所想. 先是回家询问了未婚妻的想法,然后记录自己的想法. 未婚妻的想法: 1.在AI领域已经滞后于世界了.因为在墙头上看到过一个加拿 ...
- 推荐一款开源、高效、灵活的Redis桌面管理工具:Tiny RDM!支持调试与分析功能!
1.引言 在大数据和云计算快速发展的今天,Redis作为一款高性能的内存键值存储系统,在数据缓存.实时计算.消息队列等领域发挥着重要作用.然而,随着Redis集群规模的扩大和复杂度的增加,如何高效地管 ...
- 题解:AT_arc116_b [ARC116B] Products of Min-Max
在题库里面乱翻,就翻到了. 因为在这道题里面子序列不需要考虑元素顺序,所以原序列无论是什么顺序都不会影响答案. 所以先把元素按照从大到小的顺序排列,然后考虑每个元素的贡献. 在当前序列中,对于元素 \ ...