Besoine d'aide tkinter

buritos69 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour a tous,

Je dois réaliser un jeux pour une épreuve du bac mais étant débutant en programmation python je me suis retrouve bloqué face a un problème.

Pour le moment j'essayais juste a l'aide de Tkinter de créer une fenêtre avec à l'intérieur un canevas et afficher un image dedans. J'ai d'abord eu le message d'erreur "pyimage doesn't exist" que j'ai résolu en remplacant root=Tk() par root=Toplevel(), et ça marchait jusqu'à ce que j'essaye de tous rentrer dans des class ce qui a donné ceci :
from Tkinter import *
from PIL import Image,ImageTk          
 
class microbe():
    def __init__(self,can,posx,posy):          
        self.can=can           
        self.posx=posx         
        self.posy=posy
        self.microbe=Image.open("microbe.png")          
        self.microbe=self.microbe.resize((30,30),Image.ANTIALIAS)          
        self.microbe2=ImageTk.PhotoImage(self.microbe)         
        self.can.create_image(self.posy,self.posy,image=self.microbe2)         
 
 
class App(Toplevel):           
    def __init__(self):        
                                 
        self.root=Toplevel()         
        self.can=Canvas(self.root,width=400,height=400,bg="black")           
        self.can.pack          
 
        self.microbe3=microbe(self.can,100,100)
    def mainloop(self):
        self.root.mainloop()          
 
 
 
jeu=App()
jeu.mainloop()




C'est ici que je ne comprend plus; quand j'exécute le programme il m'ouvre deux fenêtre tkinter vide sans canevas ni image et je ne comprend pas du tout pourquoi. Est ce qu'une personne peut m'informer de mes erreurs flagrante ou m'aiguiller pour pouvoir me debloquer ?

Merci.





1 réponse

ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
'lut, c'est normal que tu aies 2 fenêtres: ta class
App
est un
Toplevel
, et tu en recrées un autre lors de l'initialisation...
Et il ne vaut mieux pas se servir directement d'un Toplevel, mais d'un
Tk
(et éventuellement d'une
Frame
dedans).
Ta fonction
mainloop
s'appelle elle-même, donc on a une récursion d'appel donnant lieu à une
RuntimeError: maximum recursion depth exceeded
.
Remplace ta classe comme ceci:
class App(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.can=Canvas(self,width=400,height=400,bg="black")
        self.can.pack()
 
        self.microbe3=microbe(self.can,100,100)
    def mainloop(self):
        Tk.mainloop(self)
0