Bonjour,
j'essaye d'afficher une image , or celle ci ne s'affiche pas , à moins de taper l'instruction mainloop juste après or 2 mainloop sur une meme fenetre
une idée du problème ?
Bonjour,
j'essaye d'afficher une image , or celle ci ne s'affiche pas , à moins de taper l'instruction mainloop juste après or 2 mainloop sur une meme fenetre
une idée du problème ?
bah j'ai un canvas , et j'utilise create_image comme methode , avec un canvas.pack() à la fin
Bonsoir,
Ce n'est pas la question.
IDLE, ligne de commande, etc..
Certains "interfaces" utilisent Tkinter ou un "proxy" pour l'affichage ce qui fait que l' "image" a pour 'root' celui de l'interface en question ou que sa "référence" est perdue en route... L'image ne s'affiche donc pas dans le "child".
C'est dans la même idée : "Perte de référence".à moins de taper l'instruction mainloop juste après or 2 mainloop sur une meme fenetre
Vous pouvez faire une recherche sur le sous forum Tkinter, c'est un sujet de base : "Perte de référence"
Donnez du code et comment vous le lancez pour voir.
@+
comment lancer ?
eclipse grace a un plugin
le code :
je pense avoir mis le code concernant le problème .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 class jeu_graph(): def __init__( self ): #.... self.f = Tk() self.c = Canvas( self.f , width=400 , height=400 ) self.menu() def menu(self): # ...... self.c.pack() self.f.bind( "<KeyRelease>" , self.keyrelease ) self.f.bind('<Return>', self.onEnterKey) self.f.mainloop() def onEnterKey( self , event ): #... self.affichage_graphiquement() def affichage_graphiquement( self ) : #... self.c.delete(ALL) joueur_image = PhotoImage(file="images/j.gif") self.c.create_image( x +75 , y +45 , image=joueur_image ) self.c.pack() self.f.mainloop() # si je met ca ca marche mais 2 mainloop...
merci
Bonjour,
C'est donc cela.
Testez ceci :
Ici self.joueur_image n'est là que pour rendre 'visible'/identifier l'image PhotoImage pour le Garbage collector.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 class jeu_graph: def __init__(self): #.... self.f = Tk() self.c = Canvas(self.f, width=400, height=400) self.c.pack() # self.f.bind("<KeyRelease>", self.keyrelease) self.f.bind('<Return>', self.onEnterKey) self.f.mainloop() def onEnterKey( self , event ): #... x, y = 0, 0 self.c.delete(ALL) self.joueur_image = PhotoImage(file="images/j.gif") # self... self.c.create_image(x+75, y+45, image=self.joueur_image) j = jeu_graph()
Quelques élucubrations sur le sujet ici.
@+
en effet ça marche .
un autre problème dans le meme genre :
je veux faire une animation , par exemple je bouge mon image de 10 pixel toutes les secondes .
lorsque je fais ma boucle :
le programme tourne , si je met un print à l'interieur de la boucle , ca affiche bien le message toutes les secondes or pour ce qui est graphique ca bug et meme que si je clique sur la fenetre le programme ne repond plus .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for k in range( 0 , 60 ): self.x += 10 self.affiche() time.sleep(1)
Bonjour,
L'instruction time.sleep(1) est bloquante, utilisez plutôt le .after(ms, callbak) de Tkinter.
Vous trouverez un exemple avec un Canvas ici par exemple, et bien d'autres sur le forum mais pas le temps de faire une recherche ce matin
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 def changelabel(): global id global c l.config(text=c) c += 1 if c < 61: id = root.after(1000, changelabel) def onquit(): root.after_cancel(id) root.destroy() c = 0 root = Tk() l = Label(root) l.pack() Entry(root).pack() Button(root, text='Exit', command=onquit).pack() id = root.after(1, changelabel) root.mainloop()
@+
Edit : J'en profite pour remonter un code sur le sujet. Regardez poller_routine().
Partager