Problème CANVAS
Phil_1857 Messages postés 1883 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous
Ci-joint un petit script dans lequel je souhaite afficher les rectangles à chaque création et non globalement. Qu'y a-t-il à corriger?
Merci d'avance pour vos conseils.
Cordialement
Bertrand
Nom supprimé Modération CCM
from tkinter import *
import os,sys,time
########################################################################################################
def ECRAN_BLANC():
w_col = "white" ; w_cote = 1500 ; xx = 20 ; yy = 20
canevas1.create_rectangle(xx,yy,xx+w_cote,yy+800,fill=w_col,outline = w_col) # dessin écran blanc
def EVOL(x,y):
xx = x ; yy = y ; w_col = "black"; w_cote = 10
canevas1.create_rectangle(xx,yy,xx+w_cote,yy+w_cote,fill=w_col,outline = w_col) # dessin cellules en boucle
time.sleep(1)
return(x,y)
########################################################################################################
master = Tk()
master.state ("zoomed")
master.title("Que faut-il faire pour voir l'évolution des cellules et non l'affichage final ?")
canevas1 = Canvas(master)
canevas1.pack(fill=BOTH, expand=True)
########################################################################################################
ECRAN_BLANC()
x = 70
y = 70
ind=1
while ind <10:
x,y=EVOL(x,y)
x+=20
y+= 30
ind+=1
master.mainloop()
Windows / Firefox 104.0
6 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
tu pourrais ajouter dans ta boucle:
master.update()
-
Bonjour,
Et tu peux enlever ceci:
return(x,y)
et écrire simplement:
EVOL(x,y)
car x et y ne sont pas modifiés dans la fonction, ca donnerait ça:
from tkinter import * import os,sys,time def evolution(x,y): w_col = "black"; w_cote = 10 canevas1.create_rectangle(x,y,x+w_cote,y+w_cote,fill = w_col,outline = w_col) time.sleep(1) master = Tk() master.title("test") master.state("zoomed") canevas1 = Canvas(master) canevas1.pack(fill=BOTH, expand=True) w_col = "white"; w_cote = 1500; xx = 20; yy = 20 canevas1.create_rectangle(xx,yy,xx+w_cote,yy+800,fill=w_col,outline = w_col) x,y = 70, 70 ind=0 while ind <10: evolution(x,y) x+=20 y+= 30 ind+=1 master.update() master.mainloop() -
Bonjour,
Si ton problème est résolu, tu peux le marquer "Résolu" ...
-
Bonjour, ce n'est pas comme cela que l'on procède avec tkinter. Cette bibliothèque fournit une méthode pour faire cela: after.
En conséquence, il ne faut pas utiliser de time.sleep mais bien cette méthode after.
On transforme donc la fonction EVOL:
def evol(x, y, i=0, maxi=10): w_col = "black" w_cote = 10 canevas1.create_rectangle(x, y ,x + w_cote, y + w_cote, fill=w_col, outline=w_col) # dessin cellules if i < maxi: canevas1.after(1000, evol, x + 20, y + 30, i + 1, maxi)Puis on supprime cette horrible boucle while et on appelle alors cette fonction.
# Code ECRAN_BLANC() x = 70 y = 70 evol(x, y) master.mainloop()
Et voilà, bonne continuation.
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Si seulement Bertrand4304 pouvait nous répondre ....
-
Bonjour Bertrand,
Alors, ca te va ou pas ?