Tkinter计时器在单击按钮时从0开始

发布于 2021-01-29 17:08:16

我想创建一个计时器,该计时器在用户按下按钮时从0开始,并在用户再次按下按钮时在显示的任何时间停止。到目前为止,所有查询用户的问题after都将在当前时间显示,并在几秒钟内以秒为单位进行更新:

def timer(self):
    now = time.strftime("%H:%M:%S")
    self.label.configure(text=now)
    self.after(1000, self.timer)

但是我想从零开始,显示分钟和秒。反正有实现这个目标的方法吗?

关注者
0
被浏览
146
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是一个简单的秒表GUI。有一些改进的空间。;)

    import tkinter as tk
    from time import time
    
    class Stopwatch:
        def __init__(self):
            root = tk.Tk()
            root.title('Stopwatch')
    
            self.display = tk.Label(root, text='00:00', width=20)
            self.display.pack()
    
            self.button = tk.Button(root, text='Start', command=self.toggle)
            self.button.pack()
    
            self.paused = True
            root.mainloop()
    
        def toggle(self):
            if self.paused:
                self.paused = False
                self.button.config(text='Stop')
                self.oldtime = time()
                self.run_timer()
            else:
                self.paused = True
                self.oldtime = time()
                self.button.config(text='Start')
    
        def run_timer(self):
            if self.paused:
                return
            delta = int(time() - self.oldtime)
            timestr = '{:02}:{:02}'.format(*divmod(delta, 60))
            self.display.config(text=timestr)
            self.display.after(1000, self.run_timer)
    
    Stopwatch()
    

    toggle方法可打开或关闭秒表。该run_timer方法display使用自计时器启动以来的时间(以分钟和秒为单位)更新Label。为了获得更高的准确性,请将.after延迟减少为500或100。这将对Label进行不必要的(并且是不可见的)更新,但是显示的时间将更加准确,并且GUI会感觉到响应能力更高。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看