Pages : 1
#1 Le 24/10/2006, à 21:55
- bakalegum
pythonexercice swinnen 13.19
bonjour a tous, alors je peche sur un probleme depuis avant hier deja, et je tourne en rond, oui donc comme vous laurez compris je debute en python.
donc il s agit de l exercice 13.19 du tutorial de swinnen dont l intitulé est :
13.19. Écrivez une petite application qui fait apparaître une fenêtre avec un canevas et un widget
curseur (Scale). Dans le canevas, dessinez un cercle, dont l'utilisateur pourra faire varier la
taille à l'aide du curseur.
donc apparemant rien de mechant, jarrive bien a tout afficher mais impossible de transferer la valeur self.rayon a changt (valeur obtenue dans la fonction go() ) je pense qu il faut utiliser get() d une maniere ou d une autre, mais je suis totalement perdu, jai testé tout et n importe quoi
voici mon code :
from Tkinter import *
class Truc(Canvas):
""" ouai bon faut bien commencer"""
def __init__(self,haut=200,larg=150,coul='red',rayon=30,event=None):
Canvas.__init__(self) # appel au constructeur
self.configure(width=larg, height=haut) # de la classe parente
self.larg, self.haut,self.rayon= larg, haut ,rayon
bidul= self.create_oval(65-rayon, 65-rayon, 65+rayon, 65+rayon, fill =coul)
### c est cette fonction qui ne va pas je pense...
def changt(self,event):
#self.go.get()=self.rayon
self.create_oval(65-self.rayon, 65-self.rayon, 65+self.rayon, 65+self.rayon, fill ='green')
print'chgnt','self.rayon',self.rayon
class Echel(Frame):
""" fait apparaitees la scale magik"""
def __init__(self,mini=1,maxi=100,coul='blue'):
Frame.__init__(self)
self.rayon=25
print'init',self.rayon
self.mini,self.maxi,self.coul=mini,maxi,coul
Scale(self, length=150, orient=HORIZONTAL, sliderlength =25,
label ='RAyon :', from_=mini, to=maxi, tickinterval =1,
resolution =0.25,troughcolor=coul,
showvalue =1, command = self.go).pack()
def go(self,ray):
self.rayon=float(ray)
print'go',ray
self.event_generate('<Control-Z>')
if __name__ == '__main__':
root=Tk()
fra = Truc(rayon=10)
fra.pack()
qsdf=Echel().pack()
root.bind('<Control-Z>',fra.changt)
root.mainloop()
voila je vous remercie d avance pour votre aide
Hors ligne
#2 Le 24/10/2006, à 23:00
- trucutu_
Re : pythonexercice swinnen 13.19
Tu ne peux pas passer un élément de Truc en tant qu'attribut de Echel, rajouter un argument à ta fonction changt et appeler cette fonction avec une méthode de Echel dont un des argument serait self.rayon ? C'est un problème classique d'orienté objet où il faut transférer une valeur entre deux classes.
#3 Le 24/10/2006, à 23:14
- bakalegum
Re : pythonexercice swinnen 13.19
lapin compris
jrelirais ca demain a tete reposée
Hors ligne
#4 Le 25/10/2006, à 01:33
- trucutu_
Re : pythonexercice swinnen 13.19
Oui, j'admets que j'ai été un rapide.
Par exemple, si tu crée une méthode de plus dans ta classe Truc
def egaliseRayon (rayonEchel):
self.rayon = rayonEchel
et qu'ensuite dans ton main, une fois les deux classes définie, tu fais
fra = Truc(rayon=10)
ech = Echel(...)
fra.egaliseRayon (ech.rayon)
tu transfère le rayon de la classe Echel à la classe Truc.
C'est dans ce genre de bidouille que tu dois t'orienter.
Mais en fait tu devrais t'orienter vers l'apprentissage de l'orienté objet. Parce que ce genre de problématique n'est pas propre à Python, mais tu la retrouve en C++ ou Java
(enfin, sous réserve que j'ai bien compris la nature de ton problème .... )
#5 Le 25/10/2006, à 11:08
- bakalegum
Re : pythonexercice swinnen 13.19
ok je vais tenter ca...
donc en gros je fabrique une fonction donct le but propre est de transmetre une valeur.
je pensais qu il ete possible d utiliser directement scale et .get() .configure ou un truc du genre pour faire cela..
Hors ligne
Pages : 1