你在javascript
中使用过setTimeout
、setInterval
等函数么? 今天我们来看看在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
。
如上代码,我已经放到了【码上掘金】中,来试试吧。
在单次定时器执行前取消
如果我们已经开始执行了单次定时器set_timeout
,在函数运行之前,怎么取消呢?
在brython
中,我们可以使用clear_timeout
来取消单次定时器,它需要传入单次执行器的返回值。
我们将上述代码修改一下,新增一个按钮,用作取消单次执行器,代码如下:
我们若要取消单次定时器,我们需要执行clear_timeout
,该函数需要传入set_timeout
的返回值,其为int
类型,所以说,我们要修改一下,在执行单次触发器的时候,将其返回值拿出来,即ids
。同时定义一个global
作为全局变量使用,这样再点击取消单次触发器的时候,就将其ids
传入进行即可。
相关代码已经放置到【码上掘金】了,有兴趣的可以看下:
定义循环定时器以及取消
上述已经介绍了单次定时器的定义与取消,本次来看看循环定时器是如何定义和取消的。
在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
,代码已经放到了【码上掘金】上了,代码如下:
使用timer
计时器写一个模拟短信取消发送demo
关于这个,其实我昨晚上已经写好了,放在了【码上掘金】上了。
项目核心思想为,初始化一个倒计时,假设为10秒,而后定义一个循环定时器,假设为每隔1秒(可调)去执行函数,该函数会重新计算倒计时,再把秒数-1,如此往复直至秒数为0,此时再发送信息出去,再计算倒计时过程中,可以点击取消发送。若你
运行后效果
初始页面如下:
点击发送后,在倒计时结束前,可以取消发送,倒计时会持续更新,直至为空,而后就会发送信息。
总结
brython
中虽然支持绝大多数python
关键字,但是有些是不支持的哦,比如,sleep
。所以才出现了timer
供我们调用。关于demo
中的代码,如果看过了单词和循环定时器的话,其实不难,况且我还是一个爱写注释的运维小学生,所以就不解析代码了。
怎么样,觉得好玩么? 快动动你的小手试试吧。