brython | timer 计时器

简介: brython | timer 计时器

image.png


你在javascript中使用过setTimeoutsetInterval 等函数么? 今天我们来看看在brython中是如何使用定时器的呢?


在本篇文章中,你将学习到:


  • set_timeout单次定时器
  • clear_timeout取消单次定时器
  • set_interval重复定时器
  • clear_interval取消重复定时器
  • 使用timer计时器写一个模拟短信取消发送功能

文章中,不会提及javascript语法,后端大佬们可以放心食用。


单次定时器


brython中,我们使用set_timeout来定义单次定时器,其函数具体参数为:

set_timeout(函数,毫秒,[*参数])


其中函数和毫秒是必须的。


我们可以看如下例子。

from browser import timer
from browser import html
from browser import document
btn_1 = html.BUTTON("点我开始触发单次定时器")
btn_1.id = "btn_1"
document <= btn_1
def inertVal():
    document <= "hello pdudo"
def showInfo(ev):
    timer.set_timeout(inertVal,3000)
document["btn_1"].bind("click",showInfo)


如上代码,执行的效果为,按下按钮后,间隔3000毫秒,会向屏幕追加输出一个hello pdudo

具体执行过程为: 先创建了一个按钮,显示为“点我开始触发单次定时器”,将其id属性设置为btn_1,而后为btn_1建立了一个点击事件,指向函数showInfo中,在该函数下,调用了单次计时器: timer.set_timeout(inertVal,3000),等待时间为3000毫秒,执行的函数是inertVal,而在该函数中,我们则向页面输出一个hello pdudo


如上代码,我已经放到了【码上掘金】中,来试试吧。

code.juejin.cn/pen/7159017…



在单次定时器执行前取消


如果我们已经开始执行了单次定时器set_timeout,在函数运行之前,怎么取消呢?


brython中,我们可以使用clear_timeout来取消单次定时器,它需要传入单次执行器的返回值。


我们将上述代码修改一下,新增一个按钮,用作取消单次执行器,代码如下:

image.png


我们若要取消单次定时器,我们需要执行clear_timeout,该函数需要传入set_timeout的返回值,其为int类型,所以说,我们要修改一下,在执行单次触发器的时候,将其返回值拿出来,即ids。同时定义一个global作为全局变量使用,这样再点击取消单次触发器的时候,就将其ids传入进行即可。

相关代码已经放置到【码上掘金】了,有兴趣的可以看下:

code.juejin.cn/pen/7159029…



定义循环定时器以及取消


上述已经介绍了单次定时器的定义与取消,本次来看看循环定时器是如何定义和取消的。

brython中,定义重复定时器的函数为 set_interval ,其函数具体参数为:

set_interval(函数,毫秒,[*参数])


其中,函数 和 毫秒 是必填项, 而取消重复定时器的函数为clear_interval,其具体参数为:

clear_interval(定时器ID)


其中定时器ID的类型为int

为此,我们可以写一个简单的demo来演示一下循环定时器定义以及取消,代码如下:

from browser import document,html,timer
# 定义按钮
btn1 = html.BUTTON("点击开始重复定时器")
btn1.id = "btn1"
document <= btn1
# 定义计时器
count = 0
def showInfo(ev):
  # 定义重复定时器
  global ids
  ids = timer.set_interval(printHello,1000)
def printHello():
  global count
  # 当计时器 >1 就停止重复输出
  if count > 1:
    timer.clear_interval(ids)
  count += 1
  document <= "hello pdudo"
# 注册按钮事件
document["btn1"].bind("click",showInfo)


如上代码,并不复杂,我们定义了一个按钮,并为其注册了一个点击事件 绑定到函数showInfo中,在该函数中,我们定义了一个重复计时器,每隔1秒执行printHello函数,而在该函数中,判断若count大于1 ,就停止重复计时器,若不满足条件,则count +1,并且输出hello pdudo,代码已经放到了【码上掘金】上了,代码如下:

code.juejin.cn/pen/7159067…



使用timer计时器写一个模拟短信取消发送demo


关于这个,其实我昨晚上已经写好了,放在了【码上掘金】上了。

使用brython实现
信息发送倒计时 - 码上掘金

项目核心思想为,初始化一个倒计时,假设为10秒,而后定义一个循环定时器,假设为每隔1秒(可调)去执行函数,该函数会重新计算倒计时,再把秒数-1,如此往复直至秒数为0,此时再发送信息出去,再计算倒计时过程中,可以点击取消发送。若你

运行后效果


初始页面如下:


image.png

点击发送后,在倒计时结束前,可以取消发送,倒计时会持续更新,直至为空,而后就会发送信息。


image.png



总结


brython中虽然支持绝大多数python关键字,但是有些是不支持的哦,比如,sleep。所以才出现了timer供我们调用。关于demo中的代码,如果看过了单词和循环定时器的话,其实不难,况且我还是一个爱写注释的运维小学生,所以就不解析代码了。


怎么样,觉得好玩么? 快动动你的小手试试吧。





相关文章
|
9月前
|
存储 人工智能 Cloud Native
玄晶引擎深度测评:Sora2+Coze+RPA三重赋能,AI内容生产工具的云原生进化
玄晶引擎升级,融合Sora2视频生成、Coze智能体调用与RPA自动化运营,打造云原生AI内容生产闭环。通过云边协同、低代码集成与多平台联动,实现从创意到转化的全链路提效,助力企业降本增效,提供阿里云生态下AI工具选型新范式。(239字)
579 5
|
Rust Ubuntu Java
官方支持长达12年!Ubuntu 24.04 LTS正式开放升级:Linux 6.8内核
对于开发者而言,Ubuntu 24.04 LTS在性能工程和机密计算方面迈出了重要一步,包含了Python 3.12、Ruby 3.2、PHP 8.3和Go 1.22等最新编程语言版本,重点优化了对.NET、Java和Rust等开发环境的支持。
|
12月前
|
机器学习/深度学习 存储 缓存
【无人机群】在灾难响应中部署最佳多跳点对点路由研究(Matlab代码实现)
【无人机群】在灾难响应中部署最佳多跳点对点路由研究(Matlab代码实现)
287 0
|
机器学习/深度学习 人工智能 安全
并非只有AI-2025年工作技能报告
全球最大的在线学习平台Coursera发布《2025年工作技能报告》,报告基于500万企业学习者和7,000多家机构的数据分析,揭示了2025年全球劳动力所需的关键技能趋势。报告强调,随着GenAI的快速发展,相关技能的课程注册量同比增长了866%,显示出对AI能力的需求激增。
1566 9
|
Web App开发 Android开发
利用firefox调试安卓手机端web
该教程详细介绍如何通过Firefox浏览器实现手机与电脑的远程调试。手机端需安装最新版Firefox,并按指定步骤设置完成;电脑端则需安装15版及以上Firefox。设置完成后,通过工具栏中的“远程调试”选项,输入手机IP地址即可连接。连接确认后,即可使用电脑端Firefox调试器调试手机上的Web信息。注意,调试前手机需提前打开目标网页。
1874 2
|
Ubuntu Linux
在Linux中,如何升级系统内所有已安装软件包?
在Linux中,如何升级系统内所有已安装软件包?
|
运维 监控 安全
高效运维管理:提升系统稳定性的策略与实践
【10月更文挑战第13天】 本文探讨了高效运维管理的关键策略和实践,旨在帮助运维团队提升系统的稳定性。通过分析常见问题,提出具体的解决方案,包括监控与告警、自动化工具的应用、故障排查与恢复、性能优化以及安全防护等方面。通过这些策略和实践,可以帮助企业构建一个稳定、可靠且高效的IT系统。
745 1
|
JavaScript 前端开发 程序员
甚至用不了五分钟就能学会vscode插件开发
本文介绍了VSCode插件的开发流程,从创建项目到最终发布。首先通过安装`yo`和`generator-code`脚手架工具初始化项目,选择JavaScript语言配置基础信息。接着,在`extension.js`中实现业务逻辑,例如将中文“变量”替换为“var”。通过F5进入调试模式验证功能。完成后使用`vsce`工具进行打包,解决可能遇到的版本不兼容或README文档问题。最后生成`.vsix`文件,可通过VSCode的“从VSIX安装”加载插件,实现开发闭环。进一步可将插件发布至官方市场供更多开发者使用。
|
SQL Oracle 关系型数据库
SQL语句中的引号使用技巧:正确处理字符串与标识符
在编写SQL语句时,引号的使用是一个基础且重要的环节
2648 0
|
存储 缓存
02 ROS创建工作空间和功能包
如何在ROS中创建工作空间和功能包,包括初始化工作空间、编译、设置环境变量以及使用`catkin_create_pkg`创建新功能包的步骤。
1143 1

热门文章

最新文章