Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink

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

neutral

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 .... hmm )

#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