0

0

使用 Flet 刷新动态变化的图片

DDD

DDD

发布时间:2025-09-14 23:24:01

|

764人浏览过

|

来源于php中文网

原创

使用 flet 刷新动态变化的图片

在 Flet 应用中动态更新图片,特别是当图片文件名不变但内容变化时,直接使用 page.update() 方法可能会失效。这是因为 Flet 可能会缓存图片,导致即使文件内容改变,显示的仍然是旧的图片。解决这个问题需要绕过缓存,强制 Flet 重新加载图片。

以下是一种实现动态刷新图片的方法:

  1. 读取图片文件: 使用 Pillow (PIL) 库读取图片文件。
  2. 转换为 NumPy 数组: 将图片转换为 NumPy 数组。
  3. 转换回图片对象: 将 NumPy 数组转换回 Pillow 的图片对象。
  4. 使用 BytesIO 创建内存缓冲区: 创建一个内存缓冲区,用于存储图片数据。
  5. 将图片保存到缓冲区: 将图片以 JPEG 格式保存到内存缓冲区。
  6. 编码为 Base64 字符串: 将内存缓冲区中的图片数据编码为 Base64 字符串。
  7. 更新 ft.Image 控件: 将 Base64 字符串赋值给 ft.Image 控件的 src_base64 属性。
  8. 调用 image1.update() 方法:调用image1.update()刷新图片控件。
import numpy as np
import base64
import flet as ft
from flet import Image
from io import BytesIO
from PIL import Image as image

image_path = r"Python\\plate_0.jpg" # 初始图片路径

def main(page=ft.Page):
    page.window_width = 375
    page.window_height = 300

    # 初始图片加载和编码
    pil_photo = image.open(image_path)
    arr = np.asarray(pil_photo)
    pil_img = image.fromarray(arr)
    buff = BytesIO()
    pil_img.save(buff, format="JPEG")
    image_string = base64.b64encode(buff.getvalue()).decode('utf-8')
    image1 = Image(src_base64=image_string)

    def update_image(e):
        """更新图片的函数"""
        nonlocal image1  # 声明 image1 为非局部变量

        # 重新读取图片
        pil_photo = image.open(image_path)
        arr = np.asarray(pil_photo)
        pil_img = image.fromarray(arr)
        buff = BytesIO()
        pil_img.save(buff, format="JPEG")
        newstring = base64.b64encode(buff.getvalue()).decode("utf-8")

        # 更新 Image 控件的 src_base64 属性
        image1.src_base64 = newstring
        image1.update()

    page.add(
        ft.Row(controls=[image1], alignment='center'),
        ft.Row(controls=[ft.TextButton("Test", on_click=update_image)], alignment='center')
    )

ft.app(target=main)

代码解释:

  • image_path: 指定了图片文件的路径。 每次点击更新按钮的时候,都会重新读取该路径下的图片,因此确保该路径下的图片已经被更新。
  • update_image(e) 函数:这个函数是关键,它负责重新读取图片,将其转换为 Base64 字符串,并更新 ft.Image 控件的 src_base64 属性。 每次点击按钮都会执行该函数。
  • image1.update(): 调用 image1.update() 方法,强制 Flet 刷新 ft.Image 控件。
  • nonlocal image1: image1 是在 main 函数中定义的,如果在 update_image 函数中要修改它,需要使用 nonlocal 关键字声明。

注意事项:

Orz企业网站管理系统 双语版
Orz企业网站管理系统 双语版

Orz企业网站管理系统整合了企业网站所需要的大部分功能,并在其基础上做了双语美化。压缩包内有必须的图片psd源文件,方便大家修改。 Orz企业网站管理系统功能: 1.动态首页 2.中英文双语同后台管理 3.产品具有询价功能 4.留言板功能 5.动态营销网络 6.打印功能 7.双击自动滚动 Orz企业网站管理系统安装 1、请将官方程序包解压后上传至您的虚拟主机即可正常使用; 2、后台管理面板登录:

下载
  • 确保安装了 Pillow 库:pip install Pillow。
  • 如果图片文件非常大,频繁的读取和编码可能会影响性能。可以考虑使用其他优化方法,例如使用线程或进程来异步处理图片。
  • 如果图片格式不是 JPEG,需要修改 pil_img.save(buff, format="JPEG") 中的 format 参数。

总结:

通过重新读取图片文件并将其转换为 Base64 编码的字符串,可以有效地解决 Flet 中动态刷新图片的问题。这种方法可以确保每次都显示最新的图片内容,即使文件名保持不变。 这种方法适用于需要实时显示外部程序修改的图片的情况,例如监控画面或图像处理结果。

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

339

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

411

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

759

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

348

2025.07.23

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

719

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

431

2024.06.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 17.9万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号