Tkinter计时器在单击按钮时从0开始
我想创建一个计时器,该计时器在用户按下按钮时从0开始,并在用户再次按下按钮时在显示的任何时间停止。到目前为止,所有查询用户的问题after
都将在当前时间显示,并在几秒钟内以秒为单位进行更新:
def timer(self):
now = time.strftime("%H:%M:%S")
self.label.configure(text=now)
self.after(1000, self.timer)
但是我想从零开始,显示分钟和秒。反正有实现这个目标的方法吗?
-
这是一个简单的秒表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会感觉到响应能力更高。