Je dois coder un programme avec la bibliothèque tkinter de Python.
Mon problème majeur est que je ne sais pas comment créer un timer ou un horloge comme hh:mm:ss
.
J'en ai besoin pour me mettre à jour (c'est ce que je ne sais pas faire).
Les fenêtres racine de Tkinter ont une méthode appelée after
qui peut être utilisée pour planifier l’appel d’une fonction après une période donnée. Si cette fonction appelle elle-même after
, vous avez configuré un événement automatiquement récurrent.
Voici un exemple de travail:
# 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()
Gardez à l'esprit que after
ne garantit pas que la fonction s'exécutera exactement à l'heure. Il ne fait que planifie le travail à exécuter après un laps de temps donné. Si l'application est occupée, il peut s'écouler un délai avant de l'appeler, car Tkinter est à thread unique. Le délai est généralement mesuré en microsecondes.
Exemple d'horloge Python3 utilisant frame.after () plutôt que l'application de niveau supérieur. Montre également la mise à jour de l'étiquette avec un 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()
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()
Je viens de créer une minuterie simple utilisant le modèle MVP (cependant, il peut être excessif pour ce projet simple). Il a quitté, démarrer/pause et un bouton d'arrêt. L'heure est affichée au format HH: MM: SS. Le comptage du temps est implémenté à l'aide d'un thread qui s'exécute plusieurs fois par seconde et de la différence entre l'heure de début du minuteur et l'heure actuelle.