Problème CANVAS
Phil_1857 Messages postés 1872 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
- Erreur d'enregistrement canva
- Canva download - Télécharger - Divers Photo & Graphisme
- Enregistrement mp3 gratuit - Télécharger - Streaming audio
- Telecharger studio d'enregistrement rap - Télécharger - Édition & Montage
- Enregistrement - Guide
- Canva générateur d'image - Accueil - Outils
6 réponses
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, 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