Python界面库Flet(1)介绍和快速使用

Python界面库Flet(1)快速上手使用


Author:Once Day Date:2024年3月19日

一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…

漫漫长路,有人对你微笑过嘛…

全系列文章可参考专栏: Python开发_Once-Day的博客-CSDN博客

参考文章:

  • python适合windows的桌面应用程序开发吗? - 知乎 (zhihu.com)
  • Introduction | Flet
  • Creating Flet apps in Python | Flet
  • The fastest way to build Flutter apps in Python | Flet
  • flet-dev/flet (github.com)
  • 超全面测评!2023年最常用的15款原型设计工具 - 知乎 (zhihu.com)
  • 快速了解墨刀,看这里! - 知乎 (zhihu.com)

文章目录

  • Python界面库Flet(1)快速上手使用
        • 1. 整体介绍
          • 1.1 Python GUI库
          • 1.2 Flet介绍
          • 1.3 安装流程
          • 1.4 简单示例
        • 2. 功能介绍
          • 2.1 获取用户输入信息
          • 2.2 丰富的颜色种类选取
          • 2.3 大型列表视图支持
          • 2.4 拽放功能支持
          • 2.5 导航栏和页面跳转
          • 2.6 文件选取和上传
          • 2.7 动画效果
          • 2.8 登入认证
          • 2.9 数据存储
          • 2.10 订阅发布机制
          • 2.11 可访问性
          • 2.12 异步APP
        • 3. 总结

1. 整体介绍
1.1 Python GUI库

在Python领域中,图形用户界面(GUI)库让开发者可以创建直观的桌面应用程序。常见的Python GUI库包括Tkinter、wxPython、PyQt和Kivy等。

  • Tkinter是Python的标准GUI库,它的一个显著优点是随Python安装包一同发行,因此无需额外安装即可使用。Tkinter适用于小型应用程序,由于它的简单性,对于新手来说是一个很好的起点。但是,它的界面风格显得有些过时,且功能上不如其他库强大。

  • wxPython是基于wxWidgets C++库的封装,提供了更加原生的用户界面。与Tkinter相比,wxPython的界面看起来更加现代,且具有更好的系统一致性。然而,wxPython的学习曲线相对陡峭,并且在部署时可能需要额外的依赖。

  • PyQt是Qt应用程序框架的Python绑定,提供了丰富的控件和强大的功能,是创建复杂应用程序的热门选择。PyQt支持跨平台并拥有优雅的用户界面,但它的商业授权可能让一些开源项目犹豫,尽管还有一个开源版本PyQt5可以使用。

  • Kivy是适用于快速开发多点触控应用程序的开源Python库。它提倡创新和简洁的API设计,能够运行在Windows、Linux、OS X、Android和iOS平台上。Kivy特别适合于需要多点触控功能的现代界面设计,但它的界面风格与常规桌面应用有所不同。

上述的这些Python库开发,都较为繁琐或者不美观,对于一些小应用开发,需要一个轻量且美观的GUI库。

Flet就是一个非常轻量简洁的GUI库,且支持多架构,二三十行代码就能构建一个简单的桌面应用。

在这里插入图片描述

1.2 Flet介绍

Flet UI是基于Flutter构建的,通过将较小的“小部件”组合成现成的“控件”,并采用指令式编程模型,简化了Flutter模型。

Flet是一种跨平台的应用开发框架,旨在简化开发者创建能够在不同操作系统和设备上运行的应用程序的过程。Flet旨在通过提供一套统一的API和一种可在多种平台上运行的代码库来解决这一问题。

在Flet的设计中,它允许开发者使用同一套代码,在多个平台(如iOS、Android、Web、Windows、MacOS等)上创建应用。这在开发过程中大大减少了重复劳动,同时提高了开发效率。

Flet框架的另一个优点在于它支持热重载(Hot Reload)功能,这意味着开发者可以在应用运行时实时预览对代码的更改,极大地提高了调试速度和开发体验。

在使用场景上,Flet非常适合于小型至中型的项目,尤其是对开发速度和跨平台能力有较高要求的场合。例如,初创公司可能会选择Flet来快速构建其产品原型,以便在不同平台上测试市场反应。同时,对于那些希望最大限度减少维护多个代码库成本的团队来说,Flet也提供了一种高效的解决方案。

在这里插入图片描述

1.3 安装流程

可以参考官方文档:Creating Flet apps in Python | Flet

Python要求3.8以上,Windows下直接使用下述命令即可:

pip install flet
pip install flet --upgrade # 升级模块
pip install flet --pre # 安装预发布版本,建议安装到虚拟环境

Linux下需要安装GStreamer库支持,否则会报错。下面是ubuntu安装命令:

sudo apt-get update
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

Flet也可以运行在WSL2中,如果无法显示,可以参考文档:

  • Diagnosing “cannot open display” type issues with WSLg · microsoft/wslg Wiki (github.com)
1.4 简单示例

要编写一个Flet应用程序,不需要成为前端专家,但建议具备Python和面向对象编程的基本知识

一个最简的app代码如下所示(一个空白界面):

import flet as ftdef main(page: ft.Page):# add/update controls on Pagepassft.app(target=main)

典型的Flet程序以调用flet.app()结束,应用程序开始等待新的用户会话。main()函数是flet应用程序中的入口点。它在每个用户会话的新线程上被调用,并传入Page实例。

当在浏览器中运行Flet应用程序时,每个打开的选项卡或页面都会启动一个新的用户会话。

当作为桌面应用程序运行时,只创建一个会话。

页面就像一个特定于用户的“画布”,是用户会话的可视化状态。要构建应用程序UI,可以向页面添加和删除控件,更新其属性。

下面添加一个文件框和两个按钮,制作一个简单的计数器。

import flet as ftdef main(page: ft.Page):page.title = "Flet counter example"page.vertical_alignment = ft.MainAxisAlignment.CENTERtxt_number = ft.TextField(value="0", text_align=ft.TextAlign.RIGHT, width=100)def minus_click(e):txt_number.value = str(int(txt_number.value) - 1)page.update()def plus_click(e):txt_number.value = str(int(txt_number.value) + 1)page.update()page.add(ft.Row([ft.IconButton(ft.icons.REMOVE, on_click=minus_click),txt_number,ft.IconButton(ft.icons.ADD, on_click=plus_click),],alignment=ft.MainAxisAlignment.CENTER,))ft.app(target=main)

下面是实际运行截图:

在这里插入图片描述

默认情况下,flet应用程序在本机操作系统窗口中启动,这对于开发非常方便。但是,可以通过修改对flet的调用在新的浏览器窗口中打开flet.app,如下:

ft.app(target=main, view=ft.AppView.WEB_BROWSER)

在内部,每一个flet应用程序都是一个web应用程序,即使它在本机操作系统窗口中打开,内置的web服务器仍然在后台启动。

后台网络服务器被称为“Fletd”,默认情况下它在一个随机的TCP端口上监听。可以指定一个自定义TCP端口,然后在浏览器中打开应用程序和桌面视图:

flet.app(port=8550, target=main)

在浏览器中打开http://localhost:<port>可以查看flet应用程序的web版本。

2. 功能介绍
2.1 获取用户输入信息

如按钮,鼠标和键盘事件,文本框,选择框,下拉框等等。

在这里插入图片描述

2.2 丰富的颜色种类选取

支持透明属性和主题色选取。

在这里插入图片描述

2.3 大型列表视图支持

通过listView组件高效渲染大量列表项(不用分页显示)。

在这里插入图片描述

2.4 拽放功能支持

可以拖动元素到其他位置并且进行交互。

在这里插入图片描述

2.5 导航栏和页面跳转

通过路由可以在不同界面之间跳转,并且保存相关历史,浏览器模式下可以回退。

在这里插入图片描述

2.6 文件选取和上传

支持原生系统的文件资源浏览器选取文件。

在这里插入图片描述

2.7 动画效果

支持函数、透明、旋转、放缩等动画形式。

在这里插入图片描述

2.8 登入认证

支持Github、Azure、Google、Auth0的OAuth 2.0认证流程。

在这里插入图片描述

2.9 数据存储

Flet支持加密存储数据到客户端本地,切记不要明文保存敏感数据。

Flet提供了一个API,用于在服务器端用户会话中存储键值数据。

2.10 订阅发布机制

支持像聊天APP一样建立多个客户端会话之间的数据消息通信。

在这里插入图片描述

2.11 可访问性

对于移动设备,屏幕阅读器(TalkBack, VoiceOver)使视障用户能够获得关于屏幕内容的口头反馈,并通过移动设备上的手势和桌面的键盘快捷键与UI进行交互。在移动设备上打开voice - over或TalkBack,并在应用程序中导航。

另外一个作用是支持debug模式,能看到各个模块的可访问性信息。

在这里插入图片描述

2.12 异步APP

Flet应用程序可以编写为异步应用程序,并使用asyncio和其他Python异步库。在Flet中自然支持调用协程,因此不需要包装它们以同步运行。

在这里插入图片描述

3. 总结

Flet还有很多组件,分为布局、导航、信息显示、按钮、输入和选择、对话框、图表、动画和一些工具组件,可以在官网自行查看。

一般开发桌面、APP、WEB等图形化应用,都要进行高保真设计,如下:

在这里插入图片描述

如果直接代码开发,效率会很低,可以在墨刀等设计软件上,快速设计好界面,这个使用起来和PPT差不多。

对于大部分程序员,其实都无需掌握专业的应用开发流程和技术。

不过,简单的学会一些基础方法,开发一个简洁优雅的小应用,还是挺不错的。







Alt

Once Day

也信美人终作土,不堪幽梦太匆匆......

如果这篇文章为您带来了帮助或启发,不妨点个赞👍和关注,再加上一个小小的收藏⭐!

(。◕‿◕。)感谢您的阅读与支持~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QT+QGIS跨平台编译】之九十:【QGIS_Crashhandler+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、QGIS_Crashhandler介绍二、QGIS下载三、文件分析四、pro文件五、编译实践一、QGIS_Crashhandler介绍 QGIS_Crashhandler模块是QGIS中的一个重要组成部分,它提供了QGIS程序的错误崩溃处理与跟踪。 二、QGIS下载 QGIS网址: QGIS Source Download 获取最新版本的…

RabbitMq高可用

消息队列高级 服务异步通信-高级篇1.消息可靠性1.1.生产者消息确认1.2.消息持久化1.3.消费者消息确认1.4.消费失败重试机制1.5.总结 2.死信交换机2.1.初识死信交换机2.2.TTL2.3.延迟队列 3.惰性队列3.1.消息堆积问题3.2.惰性队列 4.MQ集群4.1.集群分类4.2.普通集群4.3.镜像集群…

【物联网开源平台】tingsboard二次开发环境搭建+编译

文章目录 一&#xff0c;需要准备的环境二&#xff0c;获取tingsboard源码1.git拉取源码2.下载源码压缩包 三.新建仓库存放依赖文件四&#xff0c;编译五&#xff0c;遇到的错误 提示&#xff1a; 1.这篇只要准备两个环境&#xff0c;方法更简单&#xff01; 2.基于tingsboard …

网盘——客户端服务器搭建

1、配置文件加载 资源文件 将服务器IP和PORT信息填入配置文件中 将配置文件作为资源文件添加到资源文件中 程序运行时加载配置文件中的数据 1.1、首先在创建好的代码目录下面创建一个配置文件 代码目录怎么找到的呢&#xff1f; 1.2、在这个路径下面&#xff0c;创建一个…

鸿蒙Harmony应用开发—ArkTS-枚举说明

说明&#xff1a; 本模块首批接口从API version 7开始支持&#xff0c;后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 Color 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 颜色名称颜色值颜色示意Black0x000000 Blue0x0000ff Brown…

STM32 | Systick定时器(第四天)

STM32 第四天 一、Systick定时器 1、定时器概念 定时器:是芯片内部用于计数从而得到时长的一种外设。 定时器定时长短与什么有关???(定时器定时长短与频率及计数大小有关) 定时器频率换算单位:1GHZ=1000MHZ=1000 000KHZ = 1000 000 000HZ 定时器定时时间:计数个数…

NLP 笔记:Latent Dirichlet Allocation (介绍篇)

1 问题介绍 假设我们有一堆新闻&#xff0c;每个新闻都有≥1个主题 我们现在只知道新闻的内容&#xff0c;我们希望一个算法&#xff0c;帮我们把这些新闻分类成主题人类可以根据每个每个文章里面的单词判断主题&#xff0c;那计算机怎么做呢&#xff1f; ——>LDA(Latent D…

利用免费 GPU 部署体验大型语言模型推理框架 vLLM

vLLM简介 vLLM 是一个快速且易于使用的 LLM&#xff08;大型语言模型&#xff09;推理和服务库。 vLLM 之所以快速&#xff0c;是因为&#xff1a; 最先进的服务吞吐量 通过 PagedAttention 高效管理注意力键和值内存 连续批处理传入请求 使用 CUDA/HIP 图快速模型执行 量…

clang-query 的编译安装与使用示例

1&#xff0c;clang query 概述 作用&#xff1a; 检查一个程序源码的抽象语法树&#xff0c;测试 AST 匹配器&#xff1b; 帮助检查哪些 AST 节点与指定的 AST 匹配器相匹配&#xff1b; 2&#xff0c;clang-query 安装 准备&#xff1a; git clone --recursive https://git…

Linux详细介绍

Linux操作系统介绍 Linux 是一种开源的类 Unix 操作系统&#xff0c;最初由 Linus Torvalds 在 1991 年创建。与其他操作系统不同&#xff0c;Linux 是一个基于内核的操作系统&#xff0c;其核心是 Linux 内核。Linux 内核是由程序员社区不断开发和改进的&#xff0c;它提供了…

【 yolo红外微小无人机-直升机-飞机-飞鸟目标检测】

yolo无人机-直升机-飞机-飞鸟目标检测 1. 小型旋翼无人机目标检测2. yolo红外微小无人机-直升机-飞机-飞鸟目标检测3. yolo细分类型飞机-鸟类-无人机检测4. yolo红外大尺度无人机检测5. 小型固定翼无人机检测6. 大型固定翼无人机检测7. yolo航空俯视场景下机场飞机检测 1. 小型…

Hive SQL必刷练习题:排列组合问题【通过join不等式】

排列组合问题【通过join不等式】 这种问题&#xff0c;就是数学的排列不等式&#xff0c;一个队伍只能和其余队伍比一次&#xff0c;不能重复 方法1&#xff1a;可以直接通过join&#xff0c;最后on是一个不等式【排列组合问题的解决方式】 方法2&#xff1a;也可以是提前多加…

IAB欧洲发布首张泛欧洲数字零售媒体能力矩阵图

2024年1月18日&#xff0c;互动广告署-欧洲办事处&#xff08;IAB Europe)发布了首张泛欧洲数字零售媒体能力矩阵图。为媒体买家提供的新资源概述了在欧洲运营的零售商提供的现场、场外和数字店内零售媒体广告机会。 2024年1月18日&#xff0c;比利时布鲁塞尔&#xff0c;欧洲领…

【深度学习】神经网络教程

文章目录 安装python环境熟悉Python安装torch 安装python环境 有解释器&#xff1a; 设置环境&#xff1a; 熟悉Python var1 1 # 整型 var2 1.1 # 浮点型 var3 1 2j # 复数 var4 hello # 字符串 var5 True # 布尔型 var6 [1, 2, 3] # 列表List var7 (1, 2, 3)…

PHP 读取嵌入式数据 SQLite3

SQLite3 属于轻量级开源的嵌入式关系型数据库&#xff0c;但它支持 ACID(Atomicity,Consistency,Isolation,Durability) 事务。 SQLite Download Page: https://www.sqlite.org/download.html 第一步&#xff1a;在 php.ini 中开启 extensionsqlite3 第二步&#xff1a;连接数…

保研复习概率论1

1.什么是随机试验&#xff08;random trial&#xff09;&#xff1f; 如果一个试验满足试验可以在相同的条件下重复进行、试验所有可能结果明确可知&#xff08;或者是可知这个范围&#xff09;、每一次试验前会出现哪个结果事先并不确定&#xff0c;那么试验称为随机试验。 …

JVM——运行时数据区

前言 由于JAVA程序是交由JVM执行的&#xff0c;所以我们所说的JAVA内存区域划分也是指的JVM内存区域划分&#xff0c;JAVA程序具体执行的过程如下图所示。首先Java源代码文件会被Java编译器编译为字节码文件&#xff0c;然后由JVM中的类加载器加载各个类的字节码文件&#xff0…

部标JT808车辆定位监控平台单服务器13.6万接入压力测试记录(附源码)

之前经常有人问平台能支持多少设备同时在线&#xff0c;由于事情多没时间做。最近刚好有机会做下压力测试。在不间断的连续压测三天&#xff0c;最终结果为13.6万TCP连接&#xff0c;30秒上报频率。 一、测试目的 测试平台同时接入设备数量与并发处理能力。 二、准备环境 一…

ubuntu arm qt 读取execl xls表格数据

一&#xff0c;ubuntu linux pc编译读取xls的库 1&#xff0c;安装libxls(读取xls文件 电脑版) 确保你已经安装了基本的编译工具&#xff0c;如gcc和make。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt-update sudo apt-get install build-essentia…

principles and practices of interconnection networks. preface

preface 首先两个介绍章节&#xff0c;然后分为拓扑、路由、流量控制、路由器体系结构和性能五部分 第 1 章开始&#xff0c;描述什么是互连网络、如何使用它们、不同应用的性能要求以及如何选择拓扑结构。路由和流量控制就是为了满足这些要求。为了使这些概念具体化并激发本书…