Dériver la classe Tkinter.Canvas
Bonjour à tous,
J'écris un programme de simulation d'une population d'organismes (très basique). Un organisme évolue dans une zone (hauteur et largeur définies) qui restreint ses déplacements. J'ai l'intention de faire une classe Zone dérivée de Tkinter.Canvas. Voici mon code :
Code:
1 2 3 4 5 6 7 8
| 1.import Tkinter as tk
2.class Zone(tk.Canvas):
3. def __init__(self, master, hauteur, largeur, couleur):
4. self.master = master #fenêtre maîtresse
5. self.largeur, self.hauteur = largeur, hauteur
6. self.organismes = [] #collection d'organismes évoluant dans la zone
7. #appel du constructeur de la classe mère
8. super(Zone, self).__init__(self.master, width=largeur, height=hauteur, bg=couleur) |
L'appel de super ne fonctionne pas : tel que je l'ai écrit, la classe mère devrait hériter de la classe object, ce qui ne semble pas être le cas.
J'ai trouvé un tour de passe-passe qui fonctionne :
Code:
1 2 3 4 5 6 7 8 9 10 11
| 1.import Tkinter as tk
1.class Canvas(tk.Canvas, object)
2. pass
3.
4.class Zone(Canvas):
5. def __init__(self, master, hauteur, largeur, couleur):
6. self.master = master #fenêtre maîtresse
7. self.largeur, self.hauteur = largeur, hauteur
8. self.organismes = [] #collection d'organismes évoluant dans la zone
9. #appel du constructeur de la classe mère
10. super(Zone, self).__init__(self.master, width=largeur, height=hauteur, bg=couleur) |
Comme ma classe Canvas "personnelle" hérite de la classe object, mon appel à super fonctionne.
Je vous embête juste pour savoir s'il existe une manière d'appeler la classe mère sans qu'elle n'hérite d'object, et sans faire ma petite bidouille.
voila je coix que ca peu marcher
Code:
1 2 3 4 5 6 7 8 9 10
|
from Tkinter import Canvas
class Zone(Canvas):
def __init__(self, master, hauteur, largeur, couleur):
self.master = master #fenêtre maîtresse
self.largeur, self.hauteur = largeur, hauteur
self.organismes = [] #collection d'organismes évoluant dans la zone
#appel du constructeur de la classe mère
super(type(Zone),Canvas).__init__(type(Zone),self.master, width=largeur, height=hauteur, bg=couleur) |
apres quelques heures je crois qu ont s approche de la solution
[code]
from Tkinter import*
class canvas2(object):
def __init__(self,master,largeur,hauteur,couleur):
self.c=Canvas(master,width=largeur,height=hauteur,background=couleur);self.c.pack();self.c.mainloop()
class Zone(canvas2):
def __init__(self,master,largeur,hauteur,couleur):
self.organismes = [] #collection d'organismes évoluant dans la zone
#appel du constructeur de la classe mère
super(Zone,self).__init__(master,largeur,hauteur,couleur)
if __name__=='__main__':
root=Tk()
z=Zone(root,200,200,"#ABCDEF")
z.__init__(root,200,200,"#ABCDEF")
[code]