在‘Start’按钮右侧,再添加一个‘Reset’按钮用来重置计时器。因为属性基本与‘Start’按钮一致,所以这里将两个按钮的公共属性提取出来并定义为‘MyButton’,再为其设置触发事件。具体代码如下:
clock.kv修改:
<MyButton@Button>:
font_size:25
blod:True
border:(2,2,2,2)
<ClockBoxLayout>:
orientation:'vertical'
Label:
id:time_label_id
text:'[b]00[/b]:00:00'
font_size:60
markup:True
BoxLayout:
orientation:'horizontal'
padding:20
spacing:20
size_hint:(1,None)
height:90
Button:
id:start_stop_button_id
text:'Start'
font_size:25
bold:True
border:(2,2,2,2)
on_press:root.start_or_stop()
MyButton:
text:'Reset'
on_press:root.reset_clock()
Label:
id:stopwatch
text:'00:00.[size=40]00[/size]'
font_size:60
markup:True
在main.py中ClockBoxLayout类里添加reset_clock()方法函数。具体如下:
from time import strftime
from kivy.app import App
from kivy.clock import Clock
from kivy.uix.boxlayout import BoxLayout
class ClockBoxLayout(BoxLayout):
def __init__(self,**kwargs):
super().__init__(**kwargs)
self.timing_flag = False
self.timing_seconds = 0
self.on_start()
def on_start(self):
#每0秒执行一次update_time()方法
Clock.schedule_interval(self.update_time,0)
def update_time(self,nap):
if self.timing_flag:
self.timing_seconds += nap
#通过ID获取到time_label_id控件,并设置text属性值
self.ids.time_label_id.text = strftime('[b]%H[/b]:%M:%S')
m,s = divmod(self.timing_seconds,60)
#同上设置text值
self.ids.stopwatch.text=('%02d:%02d.[size=40]%02d[/size]'%(int(m),int(s),int(s*100%100)))
def start_or_stop(self):
#切换状态
self.ids.start_stop_button_id.text='Start' if self.timing_flag else 'Stop'
self.timing_flag = not self.timing_flag
def reset_clock(self):
#重置时钟
if self.timing_flag:
self.ids.start_stop_button_id.text='Start'
self.timing_flag = False
self.timing_seconds = 0
class ClockApp(App):
#实现App类的build()方法(继承自App类)
def build(self):
return ClockBoxLayout()
if __name__ == '__main__':
#设置页面背景
from kivy.core.window import Window
Window.clearcolor = [.8,.8,.8,1]
ClockApp().run()
运行main.py文件,增加了重置按钮的功能。如下图:
上一篇:开始计时
下一篇:设置背景颜色