百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

用纯Python轻松构建Web UI:Remi 动态更新,实时刷新界面内容

liuian 2025-05-26 17:22 150 浏览

引言

在前几篇文章中,我们介绍了 Remi 的基础组件、布局管理和事件处理功能。本文将深入探讨 Remi 的动态更新功能,学习如何实时刷新界面内容,从而打造更流畅的用户体验。通过动态更新,我们可以实现实时数据展示、进度条更新等功能。


动态更新简介

在 Remi 中,动态更新是通过修改组件的属性或内容实现的。例如:

  • 使用 set_text 方法更新标签的内容。
  • 使用 set_value 方法更新文本框的值。
  • 使用 append 方法动态添加子组件。

通过结合事件处理和动态更新,我们可以实现实时刷新界面内容的功能。


案例:创建一个实时任务进度条

我们将通过一个实时任务进度条的案例,演示如何使用 Remi 实现动态更新。最终效果如下:

  1. 显示一个进度条和一个标签,用于展示任务进度。
  2. 点击“开始任务”按钮后,进度条和标签会实时更新,直到任务完成。

新增类和API

1. gui.Progress 类

功能:创建一个进度条组件。

原型

gui.Progress(
    width=None,       # 进度条宽度(如 '100%' 或 '300px')
    height=None,      # 进度条高度(如 '30px')
    style=None,       # CSS 样式(字典形式)
    **kwargs          # 其他属性
)

常用方法

  • set_value(value):设置进度条的当前值(0 到 100)。
  • get_value():获取进度条的当前值。

2. Button.set_enabled 方法

功能:启用或禁用按钮。

原型

button.set_enabled(enable)  # enable 为 True 启用按钮,为 False 禁用按钮

3. threading.Thread 类

功能:创建一个新线程来执行任务。

原型

threading.Thread(target=function, args=())

示例

threading.Thread(target=self.run_task).start()

代码实现

from remi import start, App, gui
import threading
import time

class ProgressBarApp(App):
    def __init__(self, *args):
        super(ProgressBarApp, self).__init__(*args)

    def main(self):
        # 创建一个垂直布局容器作为根容器
        root_container = gui.VBox(width=400, style={'margin': 'auto', 'padding': '20px', 'border': '1px solid #ccc'})

        # 创建标题标签
        title = gui.Label("实时任务进度条", style={'font-size': '24px', 'text-align': 'center', 'margin-bottom': '20px'})

        # 创建进度条
        self.progress_bar = gui.Progress(width='100%', height=30, style={'margin-bottom': '10px'})
        self.progress_bar.set_value(0)  # 初始值为 0

        # 创建进度标签
        self.progress_label = gui.Label("0%", style={'font-size': '16px', 'text-align': 'center', 'margin-bottom': '20px'})

        # 创建开始任务按钮
        start_button = gui.Button("开始任务", width=100, height=30)
        start_button.onclick.do(self.on_start_clicked)

        # 将所有组件添加到根容器中
        root_container.append(title)
        root_container.append(self.progress_bar)
        root_container.append(self.progress_label)
        root_container.append(start_button)

        # 返回根容器
        return root_container

    def on_start_clicked(self, widget):
        # 禁用按钮,防止重复点击
        widget.set_enabled(False)

        # 启动一个新线程来执行任务
        threading.Thread(target=self.run_task).start()

    def run_task(self):
        # 模拟任务执行过程
        for i in range(101):
            time.sleep(0.1)  # 模拟任务耗时
            self.update_progress(i)

        # 任务完成后启用按钮
        self.progress_label.set_text("任务完成!")
        self.progress_bar.set_value(100)
        self.get_button().set_enabled(True)

    def update_progress(self, value):
        # 更新进度条和标签
        self.progress_bar.set_value(value)
        self.progress_label.set_text(f"{value}%")

    def get_button(self):
        # 获取开始任务按钮
        return self.progress_label.parent.children['start_task_button']

# 启动应用
if __name__ == "__main__":
    start(ProgressBarApp, address='0.0.0.0', port=8080)

代码解析

  1. 根容器

使用 gui.VBox 创建一个垂直布局容器,作为整个应用的根容器。

  1. 进度条

使用 gui.Progress 创建一个进度条,初始值为 0。

  1. 进度标签

使用 gui.Label 创建一个标签,用于显示当前进度百分比。

  1. 开始任务按钮

使用 gui.Button 创建一个按钮,并绑定点击事件。

  1. 事件处理

on_start_clicked 方法中,禁用按钮以防止重复点击,并启动一个新线程来执行任务。

  1. 任务执行

run_task 方法中,模拟任务执行过程,并通过 update_progress 方法实时更新进度条和标签。

  1. 动态更新

使用 set_value 方法更新进度条的值。

使用 set_text 方法更新标签的内容。


运行效果

保存代码为 RemiEg 项目的day05目录下,命名为 progress_bar_app.py,RemiEg项目目录结构大致如下:

├───.venv
│   ├───Lib
│   ├───.gitignore   
│   ├───CACHEDIR.TAG
│   ├───pyvenv.cfg
│   └───Scripts
├───.python-version
├───pyproject.toml
├───README.md
├───uv.lock
├───day01
│   └───hello.py
├───day02    
│   └───login_app.py
├───day03    
│   └───user_form_app.py
├───day04    
│   └───calculator_app.py
└───day05
    └───progress_bar_app.py

然后在终端中运行:

# 激活虚拟环境
.\.venv\Scripts\activate

# 运行项目脚本
python day05\progress_bar_app.py

打开浏览器,访问 http://127.0.0.1:8080,你将看到一个实时任务进度条。点击“开始任务”按钮后,进度条和标签会实时更新,直到任务完成。


动态更新技巧

  1. 多线程任务
  2. 对于耗时任务,建议使用多线程(如 threading.Thread)来避免阻塞主线程。
  3. 禁用按钮
  4. 在任务执行期间,禁用按钮可以防止用户重复点击。
  5. 实时更新
  6. 通过 set_valueset_text 方法,可以实现界面内容的实时更新。

总结

本文详细介绍了 Remi 的动态更新功能,并通过一个实时任务进度条的案例演示了如何实时刷新界面内容。在接下来的文章中,我们将深入探讨 Remi 的多页面应用开发。


交流讨论

  1. 你在使用 Remi 动态更新时遇到过哪些问题?欢迎在评论区分享!
  2. 你希望在本系列中看到哪些 Remi 的实际应用场景?欢迎留言告诉我们!

附录:本篇案例用到的函数原型


希望这篇文章对你有帮助!如果需要进一步调整或补充,请告诉我!


将陆续更新 Python 编程相关的学习资料!

头条号作者:ICodeWR

标签:#python# #分享我的头条荣誉# #发优质内容享分成# #Python#


相关推荐

搭建一个20人的办公网络(适用于20多人的小型办公网络环境)

楼主有5台机上网,则需要一个8口路由器,组网方法如下:设备:1、8口路由器一台,其中8口为LAN(局域网)端口,一个WAN(广域网)端口,价格100--400元2、网线N米,这个你自己会看了:)...

笔记本电脑各种参数介绍(笔记本电脑各项参数新手普及知识)

1、CPU:这个主要取决于频率和二级缓存,频率越高、二级缓存越大,速度越快,现在的CPU有三级缓存、四级缓存等,都影响相应速度。2、内存:内存的存取速度取决于接口、颗粒数量多少与储存大小,一般来说,内...

汉字上面带拼音输入法下载(字上面带拼音的输入法是哪个)

使用手机上的拼音输入法打成汉字的方法如下:1.打开手机上的拼音输入法,在输入框中输入汉字的拼音,例如“nihao”。2.根据输入法提示的候选词,选择正确的汉字。例如,如果输入“nihao”,输...

xpsp3安装版系统下载(windowsxpsp3安装教程)

xpsp3纯净版在采用微软封装部署技术的基础上,结合作者的实际工作经验,融合了许多实用的功能。它通过一键分区、一键装系统、自动装驱动、一键设定分辨率,一键填IP,一键Ghost备份(恢复)等一系列...

没有备份的手机数据怎么恢复

手机没有备份恢复数据方法如下1、使用数据线将手机与电脑连接好,在“我的电脑”中可以看到手机的盘符。  2、将手机开启USB调试模式。在手机设置中找到开发者选项,然后点击“开启USB调试模式”。  3、...

电脑怎么激活windows11专业版

win11专业版激活方法有多种,以下提供两种常用的激活方式:方法一:使用激活密钥激活。在win11桌面上右键点击“此电脑”,选择“属性”选项。进入属性页面后,点击“更改产品密钥或升级windows”。...

华为手机助手下载官网(华为手机助手app下载专区)

华为手机助手策略调整,已不支持从应用市场下载手机助手,目前华为手机助手是需要在电脑上下载或更新手机助手到最新版本,https://consumer.huawei.com/cn/support/his...

光纤线断了怎么接(宽带光纤线断了怎么接)

宽带光纤线断了可以重接,具体操作方法如下:1、光纤连接的时候要根据束管内,同色相连,同芯相连,按顺序进行连接,由大到小。一般有三种连接方法,分别是熔接、活动连接和机械连接。2、连接的时候要开剥光缆,抛...

深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
win7旗舰版和专业版区别(win7旗舰版跟专业版)

1、功能区别:Win7旗舰版比专业版多了三个功能,分别是Bitlocker、BitlockerToGo和多语言界面; 2、用途区别:旗舰版的功能是所有版本中最全最强大的,占用的系统资源,...

万能连接钥匙(万能wifi连接钥匙下载)

1、首先打开wifi万能钥匙软件,若手机没有开启WLAN,就根据软件提示打开WLAN开关;2、打开WLAN开关后,会显示附近的WiFi,如果知道密码,可点击相应WiFi后点击‘输入密码’连接;3、若不...

雨林木风音乐叫什么(雨林木风是啥)

雨林木风的创始人是陈年鑫先生。陈年鑫先生于1999年创立了雨林木风公司,其初衷是为满足中国市场对高品质、高性能电脑的需求。在陈年鑫先生的领导下,雨林木风以技术创新、产品质量和客户服务为核心价值,不断推...

aics6序列号永久序列号(aics6破解序列号)

关于AICS6这个版本,虽然是比较久远的版本,但是在功能上也是十分全面和强大的,作为一名平面设计师的话,AICS6的现有的功能已经能够应付几乎所有的设计工作了……到底AICC2019的功能是不是...

win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
手机可以装电脑系统吗(手机可以装电脑系统吗怎么装)

答题公式1:手机可以通过数据线或无线连接的方式给电脑装系统。手机安装系统需要一定的技巧和软件支持,一般需要通过数据线或无线连接的方式与电脑连接,并下载相应的软件和系统文件进行安装。对于大部分手机用户来...