IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Récupération de données dans un objet créé dans une autre "class"


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 39
    Points
    39
    Par défaut Récupération de données dans un objet créé dans une autre "class"
    Bonjour à tous,

    Je suis en train de faire l'exercice de la page 246 du cours de Gérard Swinnen sur Python 3.

    J'ai fait le script suivant, mais dans la "def Dimensionner_Canvas(self):" de la "class Fen_Controle(Toplevel):" je n'arrive pas à récupérer les valeurs contenues dans les Label et permettant de redimensionner le canevas contenant le papillon (j'avais pas de papillon alors j'ai mis un smiley).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    from tkinter import *
     
    class Bouton(Button):
     
        def __init__(self, boss, **Arguments):
            Button.__init__(self, boss, fg='white', bg='dark green',
                            font ='Times 14 bold italic', activebackground ="red",
                            activeforeground ="yellow", **Arguments)
     
     
    class Fenetre_Secondaire(Toplevel):
     
        def __init__(self):
            Toplevel.__init__(self)
            # on crée un Canvas....
            self.can = Canvas(self, bg='ivory')
            self.can.pack(padx=30, pady=30)
            self.overrideredirect(1) # => fenêtre sans bordure ni bandeau
            # ... et on y affiche une image
            self.img = PhotoImage(file='smiley2.gif')
            self.can.create_image(250, 150, image=self.img)
     
     
    class Boite(Frame):
     
        def __init__(self, Boss, flech=[0], orient="Vertical", valeur=150):
            Frame.__init__(self, Boss, bg ="khaki")
            if orient=='Vertical':
                Button(self, text='^', width=5, command=self.BoutonVerticalSup).pack()
                self.valeur = valeur
                print (valeur , " + ", self.valeur)
                self.lab = Label(self, text=self.valeur, bg='ivory', width=5)
                self.lab.pack(side=TOP)
                self.lab.configure(text = self.valeur)
                Button(self, text='v', width=5, command=self.BoutonVerticalInf).pack()
            else:
                Button(self, text='<', width=5, command=self.BoutonHorizontalInf).pack(side=LEFT)
                self.valeur = valeur
                print (valeur , " + ", self.valeur)
                self.lab = Label(self, text=self.valeur, bg='ivory', width=5)
                self.lab.pack(side=LEFT)
                self.lab.configure(text = self.valeur)
                Button(self, text='>', width=5, command=self.BoutonHorizontalSup).pack(side=RIGHT)
     
        def BoutonVerticalSup(self):
            self.valeur = self.valeur+10
            self.lab.configure(text = self.valeur)
     
        def BoutonVerticalInf(self):
            self.valeur = self.valeur-10
            self.lab.configure(text = self.valeur)
     
        def BoutonHorizontalSup(self):
            self.valeur = self.valeur+10
            self.lab.configure(text = self.valeur)
     
        def BoutonHorizontalInf(self):
            self.valeur = self.valeur-10
            self.lab.configure(text = self.valeur)
     
     
    class Fen_Controle(Toplevel):
     
        def __init__(self):
            Toplevel.__init__(self, bg ="khaki")
            # Contrôle Horizontal
            fleches = ['<', '>']
            self.ControleHorizontal = Boite(self, flech=fleches, orient='Horizontal', valeur=150).pack(padx=5, pady=10)
     
            # Contrôle Verticale
            fleches = ['^', 'v']
            self.ControleVertical = Boite(self, flech=fleches, orient='Vertical', valeur=150).pack(padx=5, pady=10)
     
            # Affichage des modifications du Canvas de la fenêtre secondaire
            Bouton(self, text='Dimensionner le canvas', command=self.Dimensionner_Canvas).pack(padx=10, pady=10)
     
        def Dimensionner_Canvas(self):
            print(self.ControleHorizontal)
            print(self.ControleVertical)
     
     
    class Application(Frame):
     
        def __init__(self, boss):
            Frame.__init__(self, boss, bg='cadet blue', width=400, height=300)
            self.boss = boss
            self.fra = Frame(self, bg='cadet blue')
            self.fra.pack(side=BOTTOM, pady=5)
            Bouton(self.fra, text='Top1', command=self.Creer_Fen).pack(side=LEFT, padx=1, pady=2)
            Bouton(self.fra, text='Top2', command=self.Redim_Fen).pack(side=LEFT, padx=1, pady=2)
            Bouton(self.fra, text='Quitter', command=self.Quitter).pack(side=RIGHT, padx=1, pady=2)
            self.pack(fill=BOTH, expand=Y,side=BOTTOM)
            self.pack_propagate(0)
     
        def Creer_Fen(self):
            Fenetre_Secondaire()
     
     
        def Redim_Fen(self):
            Fen_Controle()
     
     
        def Quitter(self):
            self.boss.destroy()
     
     
    # --- Programme Principal ---
     
    fen = Tk()
     
    Application(fen).mainloop()
    Pourriez-vous me dire comment je pourrais récupérer les valeurs contenues dans les Label destinés à redimensionner le canevas afin de les afficher grâce à "print()" dans "def Dimensionner_Canvas(self):" de la "class Fen_Controle(Toplevel):" ?

    En vous remerciant par avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,
    La dimension est dans .valeur donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        def Dimensionner_Canvas(self):
            print('horizontal', self.ControleHorizontal.valeur)
            print('vertical', self.ControleVertical.valeur)
    Mais .ControleHorizontal, .ControleVertical sont à None car lors de l'assignation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            fleches = ['<', '>']
            self.ControleHorizontal = Boite(self, flech=fleches, orient='Horizontal', valeur=150).pack(padx=5, pady=10)
     
            # Contrôle Verticale
            fleches = ['^', 'v']
            self.ControleVertical = Boite(self, flech=fleches, orient='Vertical', valeur=150).pack(padx=5, pady=10)
    vous stockez le retour de l'appel à .pack et non celui du constructeur:
    Ecrivez cela en 2 lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            w = self.ControleHorizontal = Boite(self, flech=fleches, orient='Horizontal', valeur=150)
            w.pack(padx=5, pady=10)
     
            # Contrôle Verticale
            fleches = ['^', 'v']
            w = self.ControleVertical = Boite(self, flech=fleches, orient='Vertical', valeur=150)
            w.pack(padx=5, pady=10)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 39
    Points
    39
    Par défaut
    J'ai passé plusieurs heures sur ce problème hier et impossible de trouver la solution que vous m'avez donnée.

    Je vous remercie énormément pour votre explication très claire qui va me permettre de continuer le cours.

    Passez une très bonne journée wiztricks!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération de données en SQL et tri dans une liste
    Par skurty dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/03/2010, 23h55
  2. Réponses: 11
    Dernier message: 06/02/2010, 02h28
  3. Réponses: 1
    Dernier message: 13/08/2009, 13h58
  4. [XL-2007] récupération de données à partir d'un tableau sur une autre feuille
    Par cindy6311 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 05/08/2009, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo