如何使用tkinter创build一个计时器?

我需要用Python的tkinter库来编写一个程序。

我的主要问题是,我不知道如何创build一个像hh:mm:ss计时器时钟

我需要它来更新自己(这是我不知道该怎么做)。

Tkinter根窗口有一个方法调用after可以用来安排一个函数在给定的时间后被调用。 如果在设置自动重复事件after该函数自己调用。

这是一个工作的例子:

 # for python 3.x use 'tkinter' rather than 'Tkinter' import Tkinter as tk import time class App(): def __init__(self): self.root = tk.Tk() self.label = tk.Label(text="") self.label.pack() self.update_clock() self.root.mainloop() def update_clock(self): now = time.strftime("%H:%M:%S") self.label.configure(text=now) self.root.after(1000, self.update_clock) app=App() 

请记住,不能保证function将准时运行。 它只安排工作在一定时间后运行。 由于Tkinter是单线程的,因此该应用程序正忙于在被调用之前可能会有延迟。 延迟通常以微秒为单位进行测量。

使用frame.after()而不是顶层应用程序的Python3时钟示例。 还显示用StringVar()更新标签

 #!/usr/bin/env python3 # Display UTC. # started with https://docs.python.org/3.4/library/tkinter.html#module-tkinter import tkinter as tk import time def current_iso8601(): """Get current date and time in ISO8601""" # https://en.wikipedia.org/wiki/ISO_8601 # https://xkcd.com/1179/ return time.strftime("%Y%m%dT%H%M%SZ", time.gmtime()) class Application(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self, master) self.pack() self.createWidgets() def createWidgets(self): self.now = tk.StringVar() self.time = tk.Label(self, font=('Helvetica', 24)) self.time.pack(side="top") self.time["textvariable"] = self.now self.QUIT = tk.Button(self, text="QUIT", fg="red", command=root.destroy) self.QUIT.pack(side="bottom") # initial time display self.onUpdate() def onUpdate(self): # update displayed time self.now.set(current_iso8601()) # schedule timer to call myself after 1 second self.after(1000, self.onUpdate) root = tk.Tk() app = Application(master=root) root.mainloop() 

我只是使用MVP模式创build了一个简单的计时器(但是对于那个简单的项目来说这可能是过度的)。 它已经退出,开始/暂停和停止button。 时间以HH:MM:SS格式显示。 时间计数是使用每秒运行几次的线程以及计时器启动的时间与当前时间之间的差值来实现的。

github上的源代码

 from tkinter import * import time tk=Tk() def clock(): t=time.strftime('%I:%M:%S',time.localtime()) if t!='': label1.config(text=t,font='times 25') tk.after(100,clock) label1=Label(tk,justify='center') label1.pack() clock() tk.mainloop()