Mettre en pause l'exécution du programme sans bloquer la mise à jour du canvas
Bonjour,
La fonction suivante met à jour mon interface graphique :
Code:
1 2 3 4 5 6 7 8 9
| def majgraphique(canvas,plateau):
for i in range(8):
for j in range(8):
if plateau[j][i]!=0:
if plateau[j][i]==1:
couleur = "black"
else:
couleur = "white"
canvas.create_oval(80*i+2,80*j+2,80*i+78,80*j+78,fill=couleur) |
Elle est appelée par la fonction click après jouer_coup (coup de l'humain) et coup_aleatoire (coup de l'ordinateur).
Je voudrais :
- coup humain
- mise à jour graphique
- une ou deux secondes de pause
- coup d' ordi
- mise à jour graphisme
Quand je rajoute un time.sleep(2) APRES l'appel de majgraphique dans mon programme, la pause s'effectue en réalité avant la mise à jour, et les deux mises à jour humain et ordinateur s'effectuent en suivant et je n'ai pas le temps de voir le coup de l'humain.
J'ai essayé de glisser mon time.sleep(2) à plusieurs endroits, mais j'ai toujours le même problème. Mon programme pause 2 secondes, puis les deux coups s'affichent en suivant (simultanément en apparence).
J'ai essayé de remplacer le sleep par un while portant sur time.time(), mais cela revient au même.
Code:
1 2 3 4 5 6 7 8 9 10 11
| def click(event):
global joueur
x,y = event.x//80,event.y//80
if est_possible(joueur,x,y):
jouer_coup(joueur,x,y)
majgraphique(canvas,plateau)
# je rajoute ici le time.sleep(2) mais le graphisme n'est pas actualisé avant la pause.
joueur = 3 - joueur
coup_aleatoire(joueur)
majgraphique(canvas,plateau)
joueur = 3 - joueur |
Quelqu'un pourrait-il m'expliquer pourquoi mon code ne fonctionne pas comme espéré et me proposer une solution ?
Merci d'avance.