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 :

difference entre master et boss


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 38
    Points : 27
    Points
    27
    Par défaut difference entre master et boss
    Bonjour,

    Je débute en python (tkinter) et je me demande quelle est la différence entre master et boss, par exemple dans le script suivant

    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
    from tkinter import *
     
    class MenuBar(Frame):
      """Barre de menus déroulants"""
      def __init__(self,boss=None):
        Frame.__init__(self,borderwidth=2)
     
        #####Menu <Fichier>#####
        fileMenu=Menubutton(self,text='Fichier',underline=0)
        fileMenu.pack(side=LEFT)
     
        #partie "déroulante"
        me1=Menu(fileMenu)
        me1.add_command(label='Effacer',underline=0,command=boss.effacer)
        me1.add_command(label='Terminer',underline=0,command=boss.quit)
     
        #intégration du menu
        fileMenu.configure(menu=me1)
     
    class Application(Frame):
      def __init__(self,boss=None):
        Frame.__init__(self)
     
        self.master.title("Fenêtre avec menus")
        mBar=MenuBar(self)
        mBar.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()
    pourquoi à la ligne 15, je dois écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        me1.add_command(label='Terminer',underline=0,command=boss.quit)
    et pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        me1.add_command(label='Terminer',underline=0,command=self.master.quit)
    idem un peu plus bas à la ligne 24, pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.master.title("Fenêtre avec menus")
    et pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boss.title("Fenêtre avec menus")
    Je croyais que les 2 (master et boss) était des références vers la fenêtre maître.

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    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 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Salut,

    Prenez un widget comme Frame, son constructeur (___init__) attend comme premier argument un "master" éventuellement égal à None:

    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
    >>> help(tk.Frame)
    Help on class Frame in module tkinter:
     
    class Frame(Widget)
     |  Frame widget which may contain other widgets and can have a 3D border.
     |
     |  Method resolution order:
     |      Frame
     |      Widget
     |      BaseWidget
     |      Misc
     |      Pack
     |      Place
     |      Grid
     |      builtins.object
     |
     |  Methods defined here:
     |
     |  __init__(self, master=None, cnf={}, **kw)
     |      Construct a frame widget with the parent MASTER.
     |
     |      Valid resource names: background, bd, bg, borderwidth, class,
     |      colormap, container, cursor, height, highlightbackground,
     |      highlightcolor, highlightthickness, relief, takefocus, visual, width.

    Si vous s/classez Frame, il faudra appelez le constructeur de la classe parente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Application(Frame):
      def __init__(self,boss=None):
        Frame.__init__(self)
    Vous avez le droit, dans la foulée de renommer, "master" en "boss".
    note: ce n'est pas une bonne idée puisque du coup vous vous mélanger les pinceaux.

    Par contre, Frame.__init__ va créer un attribut "master" dans lequel sera stocké le "parent".
    C'est ce qui est récupéré par "self.master".
    "boss" n'est que variable locale de la fonction/méthode.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 38
    Points : 27
    Points
    27
    Par défaut
    merci de ta réponse

    donc si j'ai bien compris
    - master, dans le cas d'une Frame, c'est la fenêtre qui s'affiche à l'écran
    - boss ne sers qu'à pouvoir appeler les fonctions de la classe parente

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    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 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Citation Envoyé par olivbarb Voir le message
    - master, dans le cas d'une Frame, c'est la fenêtre qui s'affiche à l'écran
    - boss ne sers qu'à pouvoir appeler les fonctions des autres classes, liées à cette fenêtre
    "master" au sens Tk est le parent du widget.
    "boss" est le nom que vous avez donné au premier paramètre de vos constructeurs.
    En écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MenuBar(Frame):
      """Barre de menus déroulants"""
      def __init__(self,boss=None):
        Frame.__init__(self,borderwidth=2)
    vous ne propagez pas "master=boss" au Frame.__init__.

    Donc votre "boss" n'est pas le "master" Tk.

    Pour le reste, je ne sais pas comment vous expliquer.
    Tk() correspond à la fenêtre principale de votre application.
    Les widget vont être créés (visuellement) "dedans".
    En principe "Frame" permet de fabriquer un sous-master a des widgets.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> import tkinter as tk
    >>> left = tk.Frame()
    >>> right = tk.Frame()
    >>> left.pack(side='left')
    >>> right.pack(side='right')
    >>> tk.Label(left, text='left label').pack()
    >>> tk.Label(right, text='right label').pack()
    En gros, vous avez une arborescence, une hiérarchie de widgets qui va surtout permettre de gérer leur disposition (par défaut) et d'appliquer des actions à un sous ensemble: .destroy, .pack_forget,...

    Votre "boss" n'est pas "master" au sens Tk. Si je sais (un peu) ce que Tk appelle "master", je ne sais pas trop ce que vous aviez en-tête avec "boss".
    - W

    PS: Je n'ai pas trop compris comment vous construisiez votre Menu, regardez les exemples sur effbot
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Devops
    Inscrit en
    Mai 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Devops

    Informations forums :
    Inscription : Mai 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Merci pour ces explications, j'avais ce soucis, et je n'arrivais pas bien à saisir !

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. Réponses: 1
    Dernier message: 01/10/2008, 23h26
  3. Réponses: 5
    Dernier message: 13/09/2005, 13h37
  4. [] Difference entre MSHFlexGrid et MSFlexGrid
    Par olivierx dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/04/2003, 08h48
  5. Difference entre types d'Adresse IP
    Par freud dans le forum Développement
    Réponses: 3
    Dernier message: 02/03/2003, 02h06

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