python做界面,强烈推荐nicegui

这篇具有很好参考价值的文章主要介绍了python做界面,强烈推荐nicegui。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在网上搜索 “python 做界面” ,得到的结果无非是 TkinterwxWidgetsQtGtk 。它们要不然就是打包后太大,要不就是界面丑,要不就是代码繁琐。这些都是 GUI,那么 web 界面又如何?

我之前推荐过 streamlit,在简单的场景下,它仍然值得推荐。但是 streamlit 实在不灵活,受限于它的核心机制,有些需求几乎无法实现。用来做简单的数据看板,还行。

streamlit 中加个边框线都很复杂,无语

我需要一个灵活的web框架,可以做web服务的网站,也可以打包成独立的 exe 。现在找到了,就是 niecgui。

看看演示效果python做界面,强烈推荐nicegui,python,python,数据库,开发语言

后续我会发布更多关于 nicegui 的教程。其中涉及重要知识点的,会以文章形式发布(方便查找)。视频主要演示实战过程。

今天,我将用一个小例子,整体体验一下 nicegui 吸引我的特性:

  1. 上手 nicegui 最关键的知识点
  2. 打包独立的 exe

我们需要安装这些库

pip install nicegui pyinstaller pandas openpyxl

不要忘记一键三连。你的点赞、收藏、关注,是我创作的动力。


启动

创建 main.py 文件。简单显示一段文本作为开始。python做界面,强烈推荐nicegui,python,python,数据库,开发语言

  • 行3: 所有的组件使用 ui.xxxx 创建
  • 行6: 最后必需写这句,启动服务

我们只需要简单执行 main.py 脚本即可。默认情况下,你的浏览器会自动打开了页面。效果是这样子:

python做界面,强烈推荐nicegui,python,python,数据库,开发语言

注意几点:

执行脚本的控制台,此时处于占用状态。因为 nicegui 启动了一个 web 服务。

python做界面,强烈推荐nicegui,python,python,数据库,开发语言

如果你关掉了这个控制台,那么服务就停止。

nicegui 使用的是 fastapi 作为 web 服务框架

此外,它会自动监控当前目录的 python 文件变化。因此我们可以直接修改代码(保存文件),浏览器的界面会自动更新。

nicegui 内置了许多组件可以使用,我们也没必要每个组件去学习,需要的时候查文档即可。

更多组件的使用技巧,可以查看我的后续视频教程

今天重点是讲解 nicegui 的关键知识点,我将用一个非常简单的需求。看代码更直接:

python做界面,强烈推荐nicegui,python,python,数据库,开发语言

界面是这样子:

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg’ xmlns:xlink=‘http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=‘%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

  • 需求是,在输入框中输入execl 文件,点击按钮,下方显示表格数据

布局

代码与界面对比,我们可以看到 nicegui 的基本布局方式:python做界面,强烈推荐nicegui,python,python,数据库,开发语言

  • 按代码执行创建组件的顺序,界面上从上往下放置

很容易想到,它必定提供了一个能让我们把组件横向放置的组件,比如 ui.row:python做界面,强烈推荐nicegui,python,python,数据库,开发语言布局并非学习 nicegui 的核心知识点,现在,我们不需要关注布局


事件驱动

nicegui 与市面上大多数界面框架一样,使用事件驱动流程推进。在我们的需求中,点击按钮后,需要加载表格。因此需要定义按钮的点击事件。

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg’ xmlns:xlink=‘http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=‘%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

  • 行10-12:定义函数
  • 行14:设置按钮参数 on_click = 自定义函数
  • 此时点击按钮,自定义函数就会执行

但是,我们该怎么在自定义函数中加入表格?所有基于事件驱动的框架,都需要把组件提前放置好,就算当前没有合适的数据。

在 nicegui 中有三种官方的方式。建议大家耐心看完,我相信官方文档都没有讲解得这么有逻辑。

我知道官方的方式都显得挺繁琐。放心,不是只能用官方的方式,我们可以自己打造更新方式。比如像 streamlit 一样的"傻瓜模式"

方式一:直接放入空表格,在点击按钮的时候,重新填入表格数据

python做界面,强烈推荐nicegui,python,python,数据库,开发语言

  • 行19:在 row 组件下方创建 table 组件,这次我们需要在点击事件中使用表格对象,因此定义变量 table
  • 行11:使用 pandas 加载数据
  • 行13-14:改写表格的配置。nicegui 使用 aggrid,这是一个非常厉害的前端表格库,可以配置出功能强大的表格。这里我们只是配置表头和数据
  • 行15:调用 update 函数,此时界面的表格才能刷新

界面是这样子的:python做界面,强烈推荐nicegui,python,python,数据库,开发语言

这种方式需要一开始定义一个空表格,显得不自然


方式二:使用容器

我们可以先定义一个 row 容器作为表格的占位:

python做界面,强烈推荐nicegui,python,python,数据库,开发语言

  • 行19:定义 row,用变量"拿着" 对象
  • 行13:清除容器
  • 行14:把表格移到容器里面

这种方式也显得不自然,因为表格的设置(行13-14) 与表格定义的地方(行19) 被划到不同的地方。每次都需要清除容器,比较麻烦。


方式三:定义刷新函数

官方为了解决上述方式的不协调,特意打造了一种刷新装饰器。其实本质上就是方式二的封装:

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg’ xmlns:xlink=‘http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=‘%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

  • 行20-23:定义函数,并打上 ui.refreshable 装饰器
  • 行25:执行函数,相当于方式二中使用容器占位
  • 行12:由于目前的版本,refreshable 不能支持参数,我们只能定义全局变量
  • 行15:调用 table box.refresh 函数,相当于方式二中的,把容器内容清空,然后重新执行一次 table box 函数

实话说,这里官方设计不怎么样。这种方式由于全局变量的影响,导致代码更离散。

我已经向官方提了 issue ,未来的版本可能会得到改善

是不是感觉与 streamlit 相比,要麻烦很多?确实是这样子。不过,我们可以利用它的特性,打造出类似 streamlit 的运行方式。下一节我就会详细介绍


打包独立应用

nicegui 特别吸引我的一点是,它可以让我们直接打包成单文件程序,可以在其他没有安装 python 的电脑上运行。

首先,我们需要修改 main.py 的代码:

python做界面,强烈推荐nicegui,python,python,数据库,开发语言

  • 在 ui.run 函数中,设置2个参数
  • reload = False 是打包必需
  • native = True ,程序启动时,就像普通的程序一样有独立的窗体。如果此参数为False,那么启动时就会触发浏览器打开页面

然后在同目录下创建一个 build.py 文件,代码如下:

python做界面,强烈推荐nicegui,python,python,数据库,开发语言

  • 这与官方文档有一些不一样。安装官方给的代码,很容易把其他的python环境给打包进来,导致最终文件非常大
  • 建议大家使用 venv 创建虚拟环境进行打包

然后在同目录下创建一个 build.py 文件,代码如下:

[外链图片转存中…(img-8PdW7ayu-1689833136779)]

  • 这与官方文档有一些不一样。安装官方给的代码,很容易把其他的python环境给打包进来,导致最终文件非常大
  • 建议大家使用 venv 创建虚拟环境进行打包

接下来就是执行这个文件即可。成功后,同目录下会看到一个 dist 的文件夹,里面就是打包后的 exe 文件。文章来源地址https://www.toymoban.com/news/detail-642816.html

到了这里,关于python做界面,强烈推荐nicegui的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库课程设计 python+mysql+图形化界面

    进行操作的表   增加界面   删除界面   修改界面    查找界面  

    2024年02月09日
    浏览(41)
  • 程序员强烈推荐:IDEA 常用配置指南

    1.1 基本配置 图 1.1-1 修改更改主题 + 背景图片 如果IDEA版本是2023.1.2以后的版本可以开启 newUI 体验新版的UI界面,我个人是挺喜欢的🌝 1.2 快捷键配置 图1.2-1 修改快捷键 2.1 配置GIT 图2.1-1配置git 【git提交的几个小建议】 建议对git提交人和提交信息进行规范,同时代码提交应当

    2024年02月09日
    浏览(70)
  • .Net全网最简RabbitMQ操作【强烈推荐】

    【前言】 本文自1年前的1.0版本推出以来,已被业界大量科技公司采用。同时也得到了.Net圈内多位大佬的关注+推荐,文章也被多家顶级.Net/C#公众号转载。 现在更新到了7.0版本,更好的服务各位.Neter。   【正文】 支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Ma

    2024年02月08日
    浏览(48)
  • 运维:18工作中常用 Shell 脚本, 强烈推荐

      1、检测两台服务器指定目录下的文件一致性

    2024年02月14日
    浏览(41)
  • 强烈推荐一款好用的SSH连接工具,无废话版

    工欲善其事必先利其器,这句话放在咱们开发人员身上,真的是非常有道理的。 作为一名后端或者是运维,经常看到他们用XShell + xftp配合。说实话,真没必要,有好用的一站式管理工具,为什么要秀coding呢? 我用了三年的工具,真心觉得好用,可能大伙也听过,就是FinalS

    2024年02月11日
    浏览(43)
  • idea热部署插件JRebel激活(强烈推荐,试试就离不开了)

    JRebel可以实现在idea中热部署项目,修改后不用重启项目,让开发更丝滑。 JRebel需要激活才可以正常使用。 博主最近在找工作,Java前后端全站工程师一枚,有合适的请帮博主推荐一下 有项目的也可以联系我,感谢感谢 博主在北京 2023-07-04 发 V:y393016244 FileSettingsPlugins 搜索

    2024年02月13日
    浏览(46)
  • 一个.Net强大的Excel控件,支持WinForm、WPF、Android【强烈推荐】

    推荐一个强大的电子表单控件,使用简单且功能强大。 这是一个开源的表格控制组件,支持Winform、WPF和Android平台,可以方便的加载、修改和导出Excel文件,支持数据格式、大纲、公式计算、图表、脚本执行等、还支持触摸滑动,可以方便地操作表格。 总的来说是一个可以快

    2024年02月07日
    浏览(54)
  • 强烈推荐这 6 款 API 测试工具,绝对有一款没听过

    Postman : Postman 是一个流行的 API 开发和测试工具,提供了丰富的功能,包括请求构建、测试自动化、数据驱动等。用户可以通过 Postman 的界面轻松创建和测试 RESTful API。 Insomnia : Insomnia 是一款功能强大的开源 API 测试工具,支持多种协议和格式,包括 REST、GraphQL、gRPC、JSON、

    2024年02月08日
    浏览(44)
  • 还不知道ai绘画怎么操作?强烈推荐以下三个ai一键绘画软件

    ai绘画是指利用人工智能技术,根据输入的文字描述生成新的艺术作品。通过ai绘画,我们可以在很短的时间内生成具备不同风格、表现力和情感的作品,使得艺术创作更加普及和便捷。同时,ai绘画还可以应用于广告设计、游戏设计、电影制作等多个领域,为各行各业带来创

    2024年02月15日
    浏览(51)
  • 人脸识别系统OpenCV+dlib+python(含数据库)Pyqt5界面设计 项目源码 毕业设计

    Python语言、dlib、OpenCV、Pyqt5界面设计、sqlite3数据库      本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量,如果两张图片来源于同一个人,那么两个图片所映射的空间向量距离就很近,否则就会很远。因此,可以通过提取图片并

    2024年02月05日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包