Besoine d'aide tkinter

Fermé
buritos69 Messages postés 1 Date d'inscription dimanche 18 mai 2014 Statut Membre Dernière intervention 18 mai 2014 - Modifié par Chris 94 le 18/05/2014 à 01:44
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 18 mai 2014 à 10:56
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 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
18 mai 2014 à 10:56
'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