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 :

Racourci clavier sur le menu


Sujet :

Tkinter Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Par défaut Racourci clavier sur le menu
    Bonjour à tous

    j'ai compris le fonctionnement de la fonction underline, mais je voudrait savoir, comment faire pour ouvrir un menu ou un sous-menu à partir du raccourci clavier.

    Par exemple, quand j'utilise la touche F, le menu déroulant de Fichier apparait. Même chose avec Clients

    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
    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" , font = ("Times" , 11 , "bold") , underline = 0)
            fileMenu.pack(side = LEFT)
            # partie déroulante menu Fichier
            menu1 = Menu(fileMenu)
            menu1.add_command(label = "Effacer" , underline = 0 , command = boss.effacer)
            menu1.add_command(label = "Terminer" , underline = 0 , command = boss.quit)
            # intégration du menu
            fileMenu.configure(menu = menu1)
     
            #####   menu <Client>   #####
            self.client = Menubutton(self , text = "Clients" , font = ("Times" , 11 , "bold") , underline = 0)
            self.client.pack(side = LEFT , padx = 4)
            # partie déroulante menu clients
            menu1 = Menu(self.client)
            menu1.add_command(label = "Animaux" , underline = 0 , command = boss.showAnim)
            menu1.add_command(label = "Maîtres" , underline = 0 , command = boss.showMaitr)
            # intégration du menu
            self.client.configure(menu = menu1)

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    En fait, c'est une fonctionnalité du window manager..
    Sous Windows, prenez une application genre Explorer: ou sont ces underlined letters?
    Tant que vous ne les "activez" pas, elles seront invisibles et inactives.

    Pour les "activer", il faut appuyer sur "Alt".
    Le menu montre alors les magic keys (celles qui sont soulignées) pourvu que l'application ait le focus...
    Puis, <Alt><Key> does the trick.

    Et comme une application Tk s'appuie sur...
    Ça le fait aussi.

    J'ai rarement vu des utilisateurs Windows utiliser ce genre de truc. C'est une antiquité. Elle a permis de faire la transition des terminaux mode caractères avec l'interface que vous connaissez: souris, display graphique,... au début des années 90s.
    Mais c'est une interface homme-machine qui a encore du sens dans les usines: c'est bien plus rapide que pointer, cliquer,... surtout lorsqu'on a toujours la même application en face.

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Par défaut
    Oui effectivement, sous Windows il faut faire Alt + key.

    J'ai commencé l'informatique il y a très longtemps et effectivement j'ai vu arriver l'interface graphique.

    Alors je dois être de ceux qui utilisent les raccourci clavier et j'utilise beaucoup :
    - Logo Windows+E (Ouvrir le Poste de travail)
    - Logo Windows+R (Ouvrir la boîte de dialogue Exécuter)
    - Logo Windows+D (Afficher le Bureau)

    Donc j'utilise aussi dans les application :
    Ctrl + C (Copier)
    Ctrl + V (Coller)
    Ctrl + X (Couper)
    Ctrl + n (Nouvelle fenêtre)
    Alt + F (pour le menu fichier)
    etc...

    Pour avoir fait des cours interface homme/machine les applications sont encore crées dans ce sens pour faciliter l'utilisation. C'est parfois plus rapide de faire une combinaison de touche quand on a les deux mains sur le clavier que de déplacer la main vers la souris, déplacer le curseur et de faire un ou deux clic...


    Mais bon, c'est bien beau tout ça ma bonne Dame, mais pour mon application développée avec Tkinter et bien le Alt + F ne fonctionne pas.

    Par contre une fois le menu ouvert, je peux cliquer sur la touche correspondante et là ça fonctionne. Exemple, si je clique avec la souris sur Fichier et ensuite je tape Q, je quitte bien mon programme...

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par melwin Voir le message
    Par contre une fois le menu ouvert, je peux cliquer sur la touche correspondante et là ça fonctionne. Exemple, si je clique avec la souris sur Fichier et ensuite je tape Q, je quitte bien mon programme...
    Lorsque un s/menu est "actif", il prendra le "q" sans avoir a presser le "Alt".
    C'est aussi le comportement des programmes Windows qui utilisent cette fonctionnalité.
    Ce n'est pas spécifique a Tk. C'est le Windows Manager qui tourne dessous qui fait le boulot.
    Rendre actif le s/menu passe par cliquer dessus avec la souris ou <Alt><Key>.
    Ce qui est cohérent avec la documentation (windows).

    Vous essayez ça sous quel OS?

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

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Par défaut
    Je fais bien Q sans le Alt bien entendu.

    Je suis obligé de faire dérouler le menu Fichier en cliquant avec la souris car le ALT + F ne fait rien.

    J'ai aussi un menu Interventions, il faut que je clique dessus pour faire apparaitre la liste (comme pour Fichier) et si je tape M (qui correspond à une key déterminée du menu), j'ai bien le sous-menu qui apparait. Par contre là il me faut cliquer sur les choix du sous-menu car les raccourcis ne fonctionnent pas non plus.

    Je suis sous Windows Seven intégral version 6.1 service pack 1

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    La seule chose que je peux dire c'est que ça fonctionne chez moi "as expected". Ce qui ne fait pas avancer le smilblic.

    Postez un exemple de code reproduisant le comportement constate.

    note: dans le premier "post", vous avez donne du code mais il manque des bouts. Pour le faire marcher, ça oblige a ré-écrire un "contexte".
    Et dans la plupart des cas, on va passer a cote du problème.
    Nous aurons perdu du temps et vous ne serez pas plus avance.

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

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Par défaut
    J'avais mis qu'une partie du code pour expliquer ce que je faisais. Mais voici le code complet.

    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
    #########################################################################
    # Importation de fonctions externes :
     
    from tkinter import *
     
    #########################################################################
    # Définition locale de fonctions :
     
    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" , font = ("Times" , 11 , "bold") , underline = 0)
            fileMenu.pack(side = LEFT)
            # partie déroulante menu Fichier
            menu1 = Menu(fileMenu)
            menu1.add_command(label = "Effacer" , underline = 0 , command = boss.effacer)
            menu1.add_separator()    # ajout d'une ligne séparatrice
            menu1.add_command(label = "Quitter" , underline = 0 , command = boss.quit)
            # intégration du menu
            fileMenu.configure(menu = menu1)
     
            #####   menu <Client>   #####
            self.client = Menubutton(self , text = "Clients" , font = ("Times" , 11 , "bold") , underline = 0)
            self.client.pack(side = LEFT , padx = 4)
            # partie déroulante menu clients
            menu1 = Menu(self.client)
            menu1.add_command(label = "Animaux" , underline = 0 , command = boss.showAnim)
            menu1.add_command(label = "Maîtres" , underline = 0 , command = boss.showMaitr)
            # intégration du menu
            self.client.configure(menu = menu1)
     
            #####   menu <Interventions>    #####
            self.inter = Menubutton(self , text = "Interventions" , font = ("Times" , 11 , "bold") , underline = 0)
            self.inter.pack(side = LEFT , padx = 4)
            # partie déroulante menu interventions
            menu1 = Menu(self.inter)
            menu1.add_command(label = "Actes" , underline = 0 , command = boss.castr)
            menu1.add_command(label = "Ventes" , underline = 0 , command = boss.showVente)
            # sous-menu 
            menu2 = Menu(menu1)
            menu2.add_command(label = "Activyl" , underline = 2 , command = boss.activyl)
            menu2.add_command(label = "Adequan" , underline = 2 , command = boss.adequan)
            menu2.add_command(label = "Advocate" , underline = 3 , command = boss.advocate)
            # intégration sous-menu
            menu1.add_cascade(label = "Médicaments" , underline = 0 , menu = menu2)
            # intégration du menu
            self.inter.configure(menu = menu1)
     
     
    class Application(Frame):
        """Application principale"""
     
        def __init__(self , boss = None):
            Frame.__init__(self)
            self.master.title("Fenêtre avec menus")
            menBar = MenuBar(self)
            menBar.pack()
            self.canva = Canvas(self , bg = "light grey" , height = 190 , width = 250 , borderwidth = 2)
            self.canva.pack()
            self.pack()
     
     
        def effacer(self):
            self.canva.delete(ALL)
     
     
        def showAnim(self):
            self.canva.create_text(10 , 10 , anchor = NW , text = "Utah")
     
        def showMaitr(self):
            self.canva.create_text(60 , 10 , anchor = NW , text = "Orane")
     
     
        def castr(self):
            self.canva.create_text(150 , 10 , anchor = NW , text = "Castration")
     
     
     
        def showVente(self):
            self.canva.create_text(150 , 30 , anchor = NW , text = "Croquettes")
     
     
        def activyl(self):
            self.canva.create_text(150 , 50 , anchor = NW , text = "Anti-puce")
     
     
        def adequan(self):
            self.canva.create_text(150 , 70 , anchor = NW , text = "Arthrite")
     
     
        def advocate(self):
            self.canva.create_text(150 , 90 , anchor = NW , text = "Infection parasitaires")
     
     
    #########################################################################
    # Corps principal du programme
     
    if __name__ == "__main__":
        app = Application()
        app.mainloop()

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    La seule chose que je peux dire c'est que ça fonctionne chez moi "as expected". Ce qui ne fait pas avancer le smilblic.
    [...]
    - W
    Si ça fait avancer le schmilblick, puisque je sais que cela doit fonctionner ...

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Ce que je comprend de ce que vous voulez faire, c'est une barre de menu avec une cascade de s/menus associes.
    Ce genre de menu la est associe a une Toplevelqui sait ce qu'est une barre de menu.
    Un Menubutton est un Button auquel on pourra associer un menu.
    C'est un widget a part entière.

    Le gag est "j'appuie sur <Alt>"... Behind the scene, la mécanique de routage de l'event devra trouver la toplevel, sa barre de menu, etc...
    Si vous fabriquez votre propre barre de menu "from scratch" sans cette mécanique... ca ne le fait pas.

    Mais comme a priori, je ne vois pas trop pourquoi vous voudriez fabriquer votre barre de menu (et la mécanique qui va avec...) utiliser les fonctionnalites de base devrait suffire.

    Exemple:

    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
    import tkinter as tk
    from tkinter import messagebox
     
    showinfo =  messagebox.showinfo
     
    app = tk.Tk()
     
    menu = tk.Menu(app)
    app['menu'] = menu
     
    entry = tk.Menu(menu)
    menu.add_cascade(label='Fichier', menu=entry, underline=0)
    entry.add_command(label='Effacer', underline=0,
                      command=lambda: showinfo('Effacer'))
    entry.add_command(label='Quitter', underline=0,
                      command=lambda: showinfo('Quitter'))
     
    entry = tk.Menu(menu)
    menu.add_cascade(label='Client', menu=entry, underline=0)
    entry.add_command(label="Animaux", underline=0,
                      command=lambda: showinfo("Animaux"))
    entry.add_command(label="Maitres", underline=0,
                      command=lambda: showinfo('Maitres'))
     
    menu.add_command(label='Quit', underline=0, command=app.quit)
    app.mainloop()
    app.destroy()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre confirmé
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Par défaut
    Merci beaucoup, je vais regarder ça.

    Je suis en train d'apprendre le Python avec ce livre.

    Mon but serait d'arriver à développer des progiciels et logiciels spécifiques, c'est pas encore gagné ^^

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Comme vous semblez avoir quelques heures de vols, vous devriez pouvoir apprendre Python avec le tutoriel qui est livre avec la documentation.

    Pour tk, c'est plus ouvert...
    Il faut faire son marche sur le Wiki Python.

    Et puis vous pouvez toujours poster des questions ici.

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

  12. #12
    Membre confirmé
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Par défaut
    Donc j'ai fouillé un peu et du coup j'ai repris mon programme et ça donne ça, il faut que je fouille encore car des petits messages d'horreur...

    Traceback (most recent call last):
    File "E:\5 - Programmes\Python\BarreMenu.pyw", line 71, in <module>
    app = Application(fenetr)
    File "E:\5 - Programmes\Python\BarreMenu.pyw", line 44, in __init__
    menBar = MenuBar(self)
    File "E:\5 - Programmes\Python\BarreMenu.pyw", line 37, in __init__
    self.master.config(menu = self.barmenu)
    File "D:\Python33\lib\tkinter\__init__.py", line 1263, in configure
    return self._configure('configure', cnf, kw)
    File "D:\Python33\lib\tkinter\__init__.py", line 1254, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
    _tkinter.TclError: unknown option "-menu"
    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
    #########################################################################
    # Importation de fonctions externes :
     
    from tkinter import *
     
    #########################################################################
    # Définition locale de fonctions :
     
    class MenuBar (Frame):
        """Barre de menus déroulants"""
     
        def __init__(self , master = None):
            Frame.__init__(self, master, background = "grey")
     
            # création de la barre de menu :
            self.barmenu = Menu(master)
     
            # création du menu "fIchier" :
            self.fichier = Menu(self.barmenu , tearoff = 0)
            self.barmenu.add_cascade(label = "Fichier" , underline = 0 , menu = self.fichier)
            self.fichier.add_command(label = "Effacer" , underline = 0 , command = master.effacer)
            self.fichier.add_command(label = "Quitter" , underline = 0 , command = master.quitter)
     
            # création du menu "Clients" :
            self.client = Menu(self.barmenu , tearoff = 0)
            self.barmenu.add_cascade(label = "Clients" , underline = 0 , menu = self.client)
            self.client.add_command(label = "Animaux" , underline = 0 , command = master.anim)
            self.client.add_command(label = "Maîtres" , underline = 0 , command = master.maitr)
     
            # afficher le menu
            self.master.config(menu = self.barmenu)
     
    class Application(Frame):
        """Application principale"""
     
        def __init__(self , master = None):
            Frame.__init__(self)
            menBar = MenuBar(self)
            self.canva = Canvas(self , bg = "light grey" , height = 190 , width = 250 , borderwidth = 2)
            self.canva.pack()
            self.pack()
     
     
        def effacer(self):
            self.canva.delete(ALL)
     
     
        def anim(self):
            self.canva.create_text(10 , 10 , anchor = NW , text = "Utah")
     
     
        def maitr(self):
            self.canva.create_text(60 , 10 , anchor = NW , text = "Orane")
     
     
        def quitter(self):
            self.master.destroy()
     
    #########################################################################
    # Corps principal du programme
     
    if __name__ == "__main__":
        fenetr = Tk()
        fenetr.title("Ma Fenêtre")
        app = Application(fenetr)
        fenetr.mainloop()

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Le self de menBar = MenuBar(self) devient le "master" a qui on applique self.master.config(menu = self.barmenu).
    Manque de bol, "menu" ne fonctionne que pour les Toplevel...

    Je vous suggère de ranger le pistolet "class".
    Le découpage Tk est assez complique comme ça, plaquer par dessus votre partition ne va pas aider.
    Faites "sobre":

    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
    #! -*- coding:utf-8 -*-
     
    import tkinter as tk
    from tkinter.constants import *
     
    class Canvas(tk.Canvas):
        _config = dict( bg = "light grey", height = 190, width = 250, borderwidth = 2)
        def __init__(self, master=None):
            super().__init__(master, self._config)
     
        def do_effacer(self):
            self.delete(ALL)
     
        def do_anim(self):
            self.create_text(10 , 10 , anchor = NW , text = "Utah")
     
        def do_maitr(self):
            self.create_text(60 , 10 , anchor = NW , text = "Orane")
    #
    #    def do_quitter(self):
    #        self.quit()
    #   
     
    def create_menu(app, canvas):
            # création de la barre de menu :
            menu = tk.Menu(app)
     
            # création du menu "fIchier" :
            mm = tk.Menu(menu, tearoff = 0)
            menu.add_cascade(label="Fichier", underline=0, menu=mm)
            mm.add_command(label="Effacer", underline=0, command=canvas.do_effacer)
            mm.add_command(label="Quitter" , underline=0 , command=app.quit)
     
            # création du menu "Clients" :
            mm = tk.Menu(menu , tearoff = 0)
            menu.add_cascade(label="Clients", underline=0 , menu=mm)
            mm.add_command(label="Animaux", underline=0 , command=canvas.do_anim)
            mm.add_command(label="Maîtres", underline=0 , command=canvas.do_maitr)
     
            # afficher le menu
            app['menu'] = menu
     
     
    if __name__ == "__main__":
        app = tk.Tk()
        app.title("Ma Fenêtre")
     
        canvas = Canvas(app)
        canvas.pack()
     
        create_menu(app, canvas)
     
        app.mainloop()
    règles?
    1. L'application est l'instance tk.Tk().
    2. Des callbacks qui modifient l’état d'un tk.Canvas se rangent dans une s/classe de tk.Canvas.
    3. Pas la peine de faire une boite classe (MenuBar) si une boite fonction suffit (Python n'est pas Java). Pourquoi s/classer Frame.
    4. La disposition (les appels a .pack), c'est le boulot de l'appelant!




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

  14. #14
    Membre confirmé
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Par défaut
    Encore une fois merci beaucoup.

    Je veux apprendre et à apprendre autant le faire avec les bonnes manières.
    J'essaye de faire un code propre et du coups parfois j'ai tendance à trop compliquer. J'essaye d'anticiper quand le code sera plus long...

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/06/2008, 16h37
  2. [JTable] Raccourci clavier sur une Table
    Par sylvain_2020 dans le forum Composants
    Réponses: 5
    Dernier message: 05/07/2007, 09h01
  3. raccourcis clavier sur le menu popup d'un TMemo
    Par rezuss dans le forum Delphi
    Réponses: 6
    Dernier message: 11/10/2006, 16h42
  4. Comment spécifier des raccourcis claviers sur une Form ?
    Par Sydaze dans le forum Composants VCL
    Réponses: 5
    Dernier message: 17/06/2005, 09h05
  5. Evenement clavier sur toute l'interface
    Par Guybrush dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 08/02/2005, 12h13

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