Bonjour,
Tkinter utilise son propre fonctionnement d'attente.
sleep va se contenter d'attendre en dehors du thread et à aucun moment durant cette attente il ne pourra mettre à jour le message.
Tkinter dispose de plusieurs moyens d'attendre ou carrément de forcer la mise à jour.
Pour demander explicitement la mise à jour d'un widget/groupe/fenêtre :
.update()
Processes all pending events, calls event callbacks, completes any pending geometry management, redraws widgets as necessary, and calls all pending idle tasks.
Source :
effbot.org/tkinterbook
.update_idletasks()
Ensuite pour attendre un temps donné ou le temps qu'une opération se termine :
.after(delay_ms, callback=None, *args)
.after_idle(callback, *args)
Voici ce que ça donne en utilisation :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # Python 3
import tkinter as tk
import time
def fonctionAffiche():
monMessage.place(x = 10, y = 10)
monMessage.update_idletasks() # Force la mise à jour du wdiget Label
maFenetre.after(2000, fonction_fermerture) # Attend 2 secondes puis appelle fermeture
def fonction_fermerture():
maFenetre.destroy()
maFenetre = tk.Tk()
maFenetre.geometry("500x120")
monBouton = tk.Button(maFenetre, width=10, text = "Ok", command=fonctionAffiche)
monMessage = tk.Label(maFenetre, text = "Je veux afficher ce message durant 2 secondes")
monBouton.place(x = 210, y = 90) |
Partager