
from kivy.config import Config
Config.set('graphics','width','400')
Config.set('graphics', 'width', '300')
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import BooleanProperty, NumericProperty
from kivy.clock import Clock
from kivy.app import App
Builder.load_string('''
#:kivy 1.8.0
<KivyTimer>:
BoxLayout:
orientation: 'vertical'
pos: root.pos
size: root.size
Label:
text: str(root.left_time)
font_size: 100
BoxLayout:
orientation: 'horizontal'
size_hint: 1.0, 0.3
Button:
text: '+1 minute'
font_size: 16
on_press: root.on_command('+1 minute')
Button:
text: 'Stop' if root.is_countdown else 'Start'
font_size: 16
on_press: root.on_command('start/stop')
Button:
text: 'Reset'
font_size: 16
on_press: root.on_command('reset')
''')
class KivyTimer(Widget):
is_countdown = BooleanProperty(False)
left_time = NumericProperty(0)
def on_command(self, command):
if command == '+1 minute':
self.left_time += 60
elif command == 'start/stop':
if self.is_countdown:
self.stop_timer()
elif self.left_time > 0:
self.start_timer()
elif command == 'reset':
self.stop_timer()
self.left_time = 0
def on_countdown(self, dt):
self.left_time -= 1
if self.left_time == 0:
self.is_countdown = False
return False
def start_timer(self):
self.is_countdown = False
Clock.schedule_interval(self.on_countdown, 1.0)
def stop_timer(self):
self.is_countdown = False
Clock.unschedule(self.on_countdown)
class KivyTimerApp(App):
def build(self):
return KivyTimer()
if __name__ == '__main__':
KivyTimerApp().run()
近期评论