秒表-停止并启动Python

时间:2019-11-17 04:31:53

标签: python kivy

我正在制作一个简单的秒表。问题在于秒表会在您运行程序时自动运行,即使您按下停止按钮也无法使其停止运行。

class ClockApp(App):
    sw_started = False
    sw_seconds = 0

    def update_clock(self, nap):
        if self.sw_started:
            self.sw_seconds += nap

    def update_time(self, nap):
        self.root.ids.time.text = strftime('[b]%H[/b]:%M:%S')
        self.sw_seconds += nap
        minutes, seconds = divmod(self.sw_seconds, 60)
        self.root.ids.stopwatch.text = ('%02d:%02d.[size=40]%02d[/size]' % (int(minutes), int(seconds),
                                                                            int(seconds * 100 % 100)))

    def start_stop(self):
        self.root.ids.start_stop.text = ('Start'
                                         if self.sw_started else 'Stop')
        self.sw_started = not self.sw_started

    def reset(self):
        if self.sw_started:
            self.root.ids.start_stop.text = 'Start'
        self.sw_started = False
        self.sw_seconds = 0

    def on_start(self):
        Clock.schedule_interval(self.update_time, 0)


class ClockLayout(BoxLayout):
    time_prop = ObjectProperty(None)


if __name__ == '__main__':
    LabelBase.register(name='Roboto', fn_regular='Roboto-Thin.ttf', fn_bold='Roboto-Medium.ttf')

Window.clearcolor = get_color_from_hex('#101216')

ClockApp().run()

1 个答案:

答案 0 :(得分:1)

您的计时方法有两种不同的重复方式:

    def update_clock(self, nap):
        if self.sw_started:
            self.sw_seconds += nap # here

    def update_time(self, nap):
        self.root.ids.time.text = strftime('[b]%H[/b]:%M:%S')
        self.sw_seconds += nap # and here
        # [...]

update_clock仅在sw_startedTrue的情况下递增计数,但是update_time没有这样的校验。您通过schedule_interval安排的方法是update_time,因此sw_started的值无效。

改为排定update_clock

    def on_start(self):
        Clock.schedule_interval(self.update_clock, 0)

...或向update_time添加一个条件:

    def update_time(self, nap):
        if self.sw_started:
            self.root.ids.time.text = strftime('[b]%H[/b]:%M:%S')
            self.sw_seconds += nap
            minutes, seconds = divmod(self.sw_seconds, 60)
            # [...]