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 :

Menu sur une seule ligne (Tkinter)


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Points : 46
    Points
    46
    Par défaut Menu sur une seule ligne (Tkinter)
    Bonjour.
    Je n'ai pas trouvé de réponse sur Google : Comment forcer le menu à s'afficher sur une seule ligne, sans utiliser l'argument padx sur les labels ou autres widgets ?
    Le problème de padx, c'est que selon la résolution de l'écran, le menu s'affichera bien sur l'un, et pas sur l'autre.
    Par exemple, pour que mon menu s'affiche bien, il faut padx=20 sur mon fixe, et padx=25 sur mon portable.
    L'argument wrap=NONE ne fonctionne pas.

    Quelqu'un a une solution ?

    Merci.

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir Spitfire 95,

    Pas compris en fait... Tu parle de ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from Tkinter import *
    root = Tk()
     
    menu = Menu(root, tearoff=0)
    menu.add_command(label="Un", command=quit)
    menu.add_command(label="Deux", command=quit)
    root.config(menu=menu)
     
    Button(root, text='test').pack(side=TOP)
     
    root.mainloop()
    Si oui :

    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 *
     
    root = Tk()
     
    frm=Frame(root)
    frm.pack()
     
    Canvas(frm).pack(side=TOP)
    Btq = Button(frm, text='ok', command=quit)
    Btq.pack(side=TOP)
     
     
    monmenu = Menu(root)
     
    menuone = Menu(monmenu)
    monmenu.add_cascade(label="Un", menu=menuone)
    menuone.add_command(label="1", command=root.quit)
    menuone.add_command(label="2", command=root.quit)
     
    menutwo = Menu(monmenu)
    monmenu.add_cascade(label="deux", menu=menutwo)
    menutwo.add_command(label="3", command=root.quit)
    menutwo.add_command(label="4", command=root.quit)
     
    root.config(menu=monmenu)
     
    root.mainloop()
    Mais je pense que ce n'est pas cela...

    Plus de détails ?

  3. #3
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Non, en fait je cherche comment forcer le menu à s'afficher sur une seule ligne en haut de la fenêtre, de façon à ce que si le menu a une largeur de 300px et la fenêtre a une largeur de 200px, tout le menu s'affiche sur une ligne, et non pas deux.

    Exemple :
    |Menu 1 | Menu 2 | Menu 3 | Menu 4|

    Au lieu de :
    |Menu 1 | Menu 2 | Menu 3 |
    | Menu 4|

    Merci de votre aide.

  4. #4
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut
    Bonjour, je démarre tout juste en python et ta problématique a attiré ma curiosité.

    De ce que j'ai trouvé sur le net, le 'wraplenght' n'est pas applicable aux widgets qui comme les menus ont un < label= '...' >. D'ailleurs, quand on essaie de forcer un saut à la ligne dans le label avec \n, cela ne fonctionne pas.
    Par contre, le widget Menubutton contient un < text= '...' > à qui l'on peu appliquer le wraplength.

    je te propose donc ce code avec des Menubutton, en espérant que cela répondra à ta question (pour une fenêtre de 300 de large, on compte 10% pour les marges, donc il reste pour afficher le texte 90 pixels par menu si 3 menus sont présents) :

    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
    #!/usr/bin/python
     
    try: from tkinter import *
    except: from Tkinter import *
     
    root = Tk()
    root.geometry("300x300+0+0")
     
    frameDeMenu=Frame(root)
    frameDeMenu.pack()
     
    mb1 = Menubutton ( frameDeMenu, text="blablabla pour mon grand menu 1", wraplength=90, relief=RAISED )
    mb1.pack(side=LEFT, expand=1, fill=BOTH)
    mb1.menu = Menu ( mb1, tearoff=0 )
    mb1['menu']=mb1.menu
    mb1.menu.add_command(label="1", command=root.quit)
    mb1.menu.add_command(label="2", command=root.quit)
     
    mb2 = Menubutton ( frameDeMenu, text="autre blablabla pour mon encore plus grand menu 2", wraplength=90, relief=RAISED )
    mb2.pack(side=LEFT, expand=1, fill=BOTH)
    mb2.menu = Menu ( mb2, tearoff=0 )
    mb2['menu']=mb2.menu
    mb2.menu.add_command(label="3", command=root.quit)
    mb2.menu.add_command(label="4", command=root.quit)
     
    mb3 = Menubutton ( frameDeMenu, text="mon petit menu 3", wraplength=90, relief=RAISED )
    mb3.pack(side=LEFT, expand=1, fill=BOTH)
    mb3.menu = Menu ( mb3, tearoff=0 )
    mb3['menu']=mb3.menu
    mb3.menu.add_command(label="5", command=root.quit)
    mb3.menu.add_command(label="6", command=root.quit)
     
    frameDuReste=Frame(root)
    frameDuReste.pack()
     
    Canvas(frameDuReste, bg = 'lightyellow').pack(side=TOP)
    Btq = Button(frameDuReste, text='ok', command=quit)
    Btq.pack(side=TOP)
     
    root.mainloop()
    Ensuite, il est facile d'adapter la longueur du wraplength à la taille geometry de la fenêtre si celle ci est variable ou si le nombre de Menubutton change au cours du programme.

  5. #5
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Bonjour.
    Je ne pense pas que cette méthode s'adapte à tous les écrans (à toutes les résolutions). De plus, il faudra utiliser root.geometry dans chaque fonctions pour que la taille de la fenetre s'adapte à chaque fonction, ce qui est sûrement simplifiable.

    Cordialement.

  6. #6
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut
    Bonjour,
    Si tes recherches t'amènent à trouver une solution plus simple, je suis moi aussi preneur.

Discussions similaires

  1. [SQL-SERVER 2000] Problème de requête sur une seule ligne
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 16h54
  2. [CSS][firefox]positionner mes div sur une seule ligne
    Par hansaplast dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 29/03/2006, 14h44
  3. Plusieures infos sur une seule ligne avec ou sans tableau
    Par Him dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/03/2006, 14h16
  4. Synedit -commentaires sur une seule ligne
    Par Malone dans le forum Composants VCL
    Réponses: 2
    Dernier message: 03/02/2006, 19h44
  5. wxWidgets : couleur de texte sur une seule ligne
    Par Oatly dans le forum wxWidgets
    Réponses: 8
    Dernier message: 05/12/2004, 19h24

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