网站流量分析网站,移动终端开发是学什么,在线设计的软件,wordpress使用密码错误随着Python在各个领域的广泛应用#xff0c;特别是在数据科学和Web开发领域#xff0c;对于一个简单易用且功能强大的用户界面#xff08;UI#xff09;开发工具的需求日益增长。传统的Python GUI库如Tkinter、PyQt虽然功能强大#xff0c;但在易用性和现代感方面略显不足… 随着Python在各个领域的广泛应用特别是在数据科学和Web开发领域对于一个简单易用且功能强大的用户界面UI开发工具的需求日益增长。传统的Python GUI库如Tkinter、PyQt虽然功能强大但在易用性和现代感方面略显不足。近年来一个新的跨平台UI框架——Flet因其简洁的API和高效的开发体验而逐渐受到开发者的青睐。 Flet简介
Flet是一个用于构建跨平台应用的现代框架它支持使用Python编写前端逻辑同时利用Web技术HTML/CSS/JavaScript来呈现用户界面。这意味着开发者可以使用熟悉的Python语法来创建应用程序并且这些应用能够在多个平台上运行包括Windows、macOS、Linux以及移动设备。
为什么选择Flet
易学易用Flet的设计理念之一就是简化开发过程其API设计直观即使是初学者也能快速上手。 跨平台支持不仅限于桌面应用Flet同样适用于移动应用开发这使得它成为一个真正的全栈解决方案。 丰富的组件库内置了大量预定义的UI组件覆盖了从按钮到表格等多种常见的用户界面元素。 实时预览支持热重载功能可以在开发过程中即时查看更改效果极大地提高了迭代效率。
快速入门
安装Flet非常简单只需通过pip命令即可完成
pip install flet简单示例
import flet as ftdef main(page: ft.Page):page.title Hello, world!page.add(ft.Text(Hello, world!))ft.app(targetmain)创建第一个Flet应用
接下来我们来创建一个简单的Flet应用程序。以下示例展示了如何创建一个基本的Web应用包含一个按钮和一个文本框。
import flet as ftdef main(page: ft.Page):page.title 我的第一个Flet应用# 创建文本框text_field ft.TextField(label输入文本)# 创建按钮点击事件def button_click(e):page.add(ft.Text(f你输入的内容是{text_field.value}))# 创建按钮submit_button ft.ElevatedButton(text提交, on_clickbutton_click)# 将组件添加到页面page.add(text_field, submit_button)ft.app(targetmain)
执行
flet app.py 文件编码转换工具示例
仅以少量的代码即可轻松实现已带界面的实用工具。举例如下 代码如下
import os
import flet as ftdef convert_encoding(file_path, from_encodinggbk, to_encodingutf-8):try:# 读取文件内容with open(file_path, r, encodingfrom_encoding) as f:content f.read()# 写入文件内容with open(file_path, w, encodingto_encoding) as f:f.write(content)return f文件 {file_path} 已从 {from_encoding} 转换为 {to_encoding}except Exception as e:return f转换 {file_path} 时出错: {e}def batch_convert(folder_path, from_encodinggbk, to_encodingutf-8):if not os.path.isdir(folder_path):return f无效的文件夹路径: {folder_path}results []for root, _, files in os.walk(folder_path):for file in files:if file.endswith(.txt):file_path os.path.join(root, file)result convert_encoding(file_path, from_encoding, to_encoding)results.append(result)return resultsdef main(page: ft.Page):page.title 文件编码转换工具folder_input ft.TextField(label选择文件夹路径, width400)from_encoding_select ft.Dropdown(label选择源编码, options[ft.dropdown.Option(gbk),ft.dropdown.Option(utf-8),ft.dropdown.Option(iso-8859-1)], valuegbk)to_encoding_select ft.Dropdown(label选择目标编码, options[ft.dropdown.Option(utf-8),ft.dropdown.Option(gbk),ft.dropdown.Option(iso-8859-1)], valueutf-8)result_area ft.Column()def on_convert_click(e):folder_path folder_input.valuefrom_encoding from_encoding_select.valueto_encoding to_encoding_select.valueresults batch_convert(folder_path, from_encoding, to_encoding)# 清空结果区域result_area.controls.clear()# 显示结果for result in results:result_area.controls.append(ft.Text(result))page.update()convert_button ft.ElevatedButton(text转换编码, on_clickon_convert_click)# 将组件添加到页面page.add(folder_input,from_encoding_select,to_encoding_select,convert_button,result_area)ft.app(targetmain)Flet实现串口助手工具
确保已安装flet和pyserial将以上代码保存到一个 Python 文件中然后运行该文件。
pip install pyserial import flet as ft
import serial
import serial.tools.list_ports
import threading
import timeimport flet as ft
import serial
import serial.tools.list_ports
import threading
import timeclass SerialAssistant:def __init__(self):self.serial_port Noneself.running Falsedef list_ports(self):ports serial.tools.list_ports.comports()return [port.device for port in ports]def open_port(self, port, baudrate):try:self.serial_port serial.Serial(port, baudrate, timeout1)self.running True # 开始接收数据return True, 串口已打开except Exception as e:return False, f打开串口时出错: {e}def close_port(self):self.running Falseif self.serial_port and self.serial_port.is_open:self.serial_port.close()self.serial_port Nonereturn 串口已关闭return 串口未打开def send_data(self, data):if self.serial_port and self.serial_port.is_open:self.serial_port.write(data.encode(utf-8))return 数据已发送return 请先打开串口def read_data(self):if self.serial_port and self.serial_port.is_open:if self.serial_port.in_waiting 0:return self.serial_port.read(self.serial_port.in_waiting)return bdef bytes_to_hex(byte_data):return .join(f{b:02x} for b in byte_data)# 列出所有可用的串口
def list_serial_ports():ports serial.tools.list_ports.comports()return [port.device for port in ports]def main(page: ft.Page):page.title 串口助手工具print(可用的串口, list_serial_ports())assistant SerialAssistant()ports assistant.list_ports()port_dropdown ft.Dropdown(label选择串口, options[ft.dropdown.Option(port) for port in ports])baudrate_input ft.TextField(label波特率, value9600)send_input ft.TextField(label发送数据)# 将接收数据的TextField设置为多行模式read_output ft.TextField(label接收数据,multilineTrue,min_lines6,max_lines10,height200)# 状态栏用于显示操作反馈status_bar ft.Text(状态, size15)def read_from_serial():while assistant.running:data assistant.read_data()if data:try:decoded_data data.decode(utf-8)read_output.value decoded_data # 更新接收数据except UnicodeDecodeError:hex_data bytes_to_hex(data)read_output.value f接收到的16进制数据: {hex_data}\n # 更新接收数据page.update() # 更新页面显示time.sleep(0.1) # 每100毫秒检测一次def on_open_click(e):port port_dropdown.valuebaudrate int(baudrate_input.value)success, msg assistant.open_port(port, baudrate)status_bar.value msg # 更新状态栏内容page.update() # 更新页面显示if success:threading.Thread(targetread_from_serial, daemonTrue).start() # 启动读取线程page.update()def on_close_click(e):msg assistant.close_port()status_bar.value msg # 更新状态栏内容page.update() # 更新页面显示def on_send_click(e):data send_input.valuemsg assistant.send_data(data)status_bar.value msg # 更新状态栏内容send_input.value page.update()open_button ft.ElevatedButton(text打开串口, on_clickon_open_click)close_button ft.ElevatedButton(text关闭串口, on_clickon_close_click)send_button ft.ElevatedButton(text发送, on_clickon_send_click)page.add(port_dropdown,baudrate_input,open_button,close_button,send_input,send_button,read_output,status_bar # 添加状态栏)ft.app(targetmain)总结
Flet作为一款新兴的Python UI框架以其简洁的API、强大的跨平台能力和高效的开发体验赢得了众多开发者的喜爱。无论是对于想要快速搭建原型的应用开发者还是希望深入探索Python GUI编程的初学者来说Flet都是一个值得尝试的选择。
通过本文的介绍希望能帮助读者对Flet有一个初步的认识并激发起大家使用这一框架进行实践的兴趣。未来随着社区的支持与框架本身的不断完善相信Flet将会成为更多项目中的首选工具。
其他资源
flet - 最强Qt平替使用Python轻松构建免费商用的跨平台应用 | flet中文网·flet最全教程·Qt最强平替
【Flet教程】使用Flet以Python创建TODO应用程序-CSDN博客
Introduction | Flet
文本 | flet中文网·flet最全教程·Qt最强平替