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

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 76
    Points
    76
    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 éprouvé

    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
    Points : 923
    Points
    923
    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 régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 76
    Points
    76
    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 éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 474
    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 474
    Points : 9 274
    Points
    9 274
    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
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 76
    Points
    76
    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 éprouvé

    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
    Points : 923
    Points
    923
    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

  7. #7
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 474
    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 474
    Points : 9 274
    Points
    9 274
    Billets dans le blog
    6
    Par défaut
    L'argument pour Menubarre n'est pas caché, c'est pour Application que c'est moins clair.

    En fait, on fait un raccourcis quand pour créer une nouvelle fenêtre on se contente d'instancier une classe dérivée de Frame, car Frame n'est qu'un widget conteneur. Et c'est python qui ajoute ce qui manque. Quand on créé la fenêtre avec Tk(), on est bien obligé de créer le Frame en passant l'adresse de la fenêtre (=master) en argument. J'ai donc supposé que python l'avait ajouté ici sans le dire.

    Sans cette interprétation, on ne voit pas comment "app = Application()" peut passer une valeur à la classe Application qui soit récupérée par le paramètre boss de son __init__.

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 76
    Points
    76
    Par défaut
    Excusez moi de vous répondre aussi tard.

    Je ne comprend pas encore trop cette technique de programmation. Ne vous cassez pas trop la tête à m'expliquer tout ça car je suis encore un débutant.

    En tout cas merci pour vos réponses

+ 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