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 :

Transmission de référence


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut Transmission de référence
    Bonjour,

    Je ne comprend pas un des exercice du livre de Gérard Swinnen.
    En effet dans le code ci-dessous, il utilise le paramètre boss qui réceptionne la référence de la fenêtre maîtresse or je ne comprend pas comment ce paramètre est passé et comment il permet ensuite d'appeler les fonctions Effacer et Quitter
    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
    from Tkinter import *
    
    class Menubarre(Frame):
        def __init__(self, boss= None):
            Frame.__init__(self, borderwidth = 2)
            menufichier = Menubutton(self, text= 'Fichier')
            menufichier.pack(side=LEFT)
            me1 = Menu(menufichier)
            me1.add_command(label='Effacer', underline = 0, command = boss.effacer)
            me1.add_command(label='Quitter', underline = 0, command = boss.quit)
            menufichier.configure(menu= me1)
    
    class Application(Frame):
        def __init__(self, boss=None):
            Frame.__init__(self)
            self.master.title('''fen?tre avec menus''')
            barremenu = Menubarre(self)
            barremenu.pack()
            self.can = Canvas(self, bg='light grey', height = 190, width = 250, borderwidth = 2)
            self.can.pack()
            self.pack()
        def effacer(self):
            self.can.delete(ALL)
            
    if __name__ == '__main__':
        app = Application()
        app.mainloop()
    Voila, si quelqu'un pouvait m'expliquer un peu tout ça, merci...

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Citation Envoyé par polo42 Voir le message
    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
    class Application(Frame):
        def __init__(self, boss=None):
            Frame.__init__(self)
            self.master.title('''fen?tre avec menus''')
            barremenu = Menubarre(self)
            barremenu.pack()
            self.can = Canvas(self, bg='light grey', height = 190, width = 250, borderwidth = 2)
            self.can.pack()
            self.pack()
        def effacer(self):
            self.can.delete(ALL)
            
    if __name__ == '__main__':
        app = Application()
        app.mainloop()
    C'est dans le contructeur que l'instance est passée, ensuite les méthodes boss.methode équivaudraient dans la classe Application à self.methode

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut
    merci pour cette réponse,

    Mais je ne vois toujours pas comment boss fait référence à la classe Application, car il apparait uniquement en tant que argument. En fait je comprend le fait que la classe application doit être appelée d'une manière ou d'une autre pour faire appel aux fonctions 'Effacer' ou 'Quitter' mais je ne comprend pas en quoi boss y joue un rôle.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    A mon avis, il y a un argument caché qui est passé: le master (=l'adresse du parent). Si tu cherches dans le code de la classe Frame, tu verras que ce "master", initialisé à None, est attendu. Je crois que le "boss" récupère cette adresse. Il eût été préférable d'utiliser master au lieu de boss.

    Tyrtamos

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut
    bonjour,

    Donc si au lieu d'utiliser boss, j'utilise le paramètre master, je n'ai pas besoin d'initialiser le paramètre boss=None. J'ai vu dans la doc que le paramètre est passé lors de l'instanciation comme oiffrig l'avait dit et comme argument caché comme tu me l'a dit.
    En tout cas merci pour ces réponses, je crois que j'ai compris maintenant.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Il n'est pas question d'un argument caché...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class Menubarre(Frame):
        def __init__(self, boss= None):
    Le constructeur de la classe Menubarre prend en paramètre l'instance du parent (l'instance d'Application)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    barremenu = Menubarre(self)
    Le constructeur de la classe Application passe bien l'instance

    Pour ce qui est du

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class Application(Frame):
        def __init__(self, boss=None):
    C'est simplement par convetion, une Frame peut être amenée à avoir un parent

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/06/2015, 14h33
  2. Transmission de pointeur par référence
    Par bertry dans le forum Débuter
    Réponses: 3
    Dernier message: 06/10/2008, 17h45
  3. Affichage de l'IPTC "Référence de la transmission"
    Par Gunner4902 dans le forum Windows Vista
    Réponses: 0
    Dernier message: 13/09/2008, 13h28
  4. Réponses: 4
    Dernier message: 01/08/2008, 17h13
  5. Réponses: 2
    Dernier message: 30/12/2006, 13h34

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