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 :

Aligner bouton avec Pack()


Sujet :

Tkinter Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Aligner bouton avec Pack()
    Bonjour,

    en utilisant le gestionnaire pack, je voudrais aligner 7 boutons les uns à côtés des autres, puis 7 autres en dessous, puis 7 autres en dessous, et ainsi de suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                        if i%8 :
                            newBtn = Button(maFen, text="Btn", borderwidth=3)
                            newBtn.pack(side=LEFT)                       
                        else :                        
                            newBtn = Button(maFen, text="Btn", borderwidth=3)
                            newBtn.pack()
                        i=i+1
    Avec ce code, j'obtiens quelque chose de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Btn
    	Btn
    		Btn
    			Btn
    				Btn
    					Btn
    						Btn
    							Btn
     
    BtnBtnBtnBtnBtnBtnBtnBtn
    			BtnBtnBtnBtnBtnBtnBtnBtn
    						BtnBtnBtnBtnBtnBtnBtnBtn
    Pourriez-vous m'aider à résoudre ce problème svp? Merci d'avance.

  2. #2
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Pourquoi t'evertuer à vouloir utiliser pack, alors que grid est tellement plus intuitif pour faire ce genre de choses ?

    Sinon, les frames servent à compartimenter des éléments graphiques, donc je vois pas ce qu'il y a de difficile de faire :

    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
    import tkinter as tk
     
    root = tk.Tk()
     
    frames_boutons = []
     
    for ligne in range(3) :
        frame = tk.Frame(root)
        frames_boutons.append(frame)
        frame.pack()
        for col in range(5) :
            bt = tk.Button(frame, text='{} - {}'.format(ligne, col))
            bt.pack(side=tk.LEFT)
     
    root.mainloop()
    Mais, grid est bien mieux adapté pour faire ça.
    Le temps ronge l'amour comme l'acide.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Salut.

    Pourquoi t'évertuer à vouloir utiliser pack, alors que grid est tellement plus intuitif pour faire ce genre de choses ?
    J'ai déjà fait ça avec grid et ça donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    k=0 # for grid
    l=0 # for grid
     if l>7 :
          k=k+1
          l=0
          label1 = Label(self.frame.interior, text=cle, bg=color, font=fonts['normal'])#, width=taille)#anchor='ws', int(L/nbreElement)) #,                             
          label1.grid(row=k, column=l)
          l = l+1
    Ce que je veux faire, c'est mettre mes boutons ou mes labels côte à côte, comme s'il s'agissait de mots d'un texte. Je voudrai aussi justifier l'ensemble, c'est peut-être le plus dur à faire.

    J'ai testé le code que vous m'avez proposé et j'obtiens un seule rangée de boutons allant de 0-0 à 2-4.

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

    Citation Envoyé par Arsene12 Voir le message
    Ce que je veux faire, c'est mettre mes boutons ou mes labels côte à côte, comme s'il s'agissait de mots d'un texte. Je voudrai aussi justifier l'ensemble, c'est peut-être le plus dur à faire.
    Peut être que vous pourriez regarder ce que sait faire le widget Text?

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

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,
    Peut être que vous pourriez regarder ce que sait faire le widget Text?
    - W
    J'ai essayé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    text = Text(self.frame.interior)#, yscrollcommand=yscrollbar.set)
    text.tag_configure('color', underline="1", borderwidth="12", relief='flat', background='orange', font=('Tempus Sans ITC', 12, 'bold'))
    text.pack(fill=X)         
    text.insert(0.0, "monTexte", 'color')
    Avec le widget Text, il me faudrait pouvoir :

    - laisser un espace non colorié entre les lignes
    - changer la couleur du background d'un mot lorsque le curseur pointe sur ce mot
    - créer une couleur de bordure (borderwith existe mais pas bordercolor)
    - créer une action lorsqu'on clique sur un mot.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Avec le widget Text, il me faudrait pouvoir :

    - laisser un espace non colorié entre les lignes
    - changer la couleur du background d'un mot lorsque le curseur pointe sur ce mot
    - créer une couleur de bordure (borderwith existe mais pas bordercolor)
    - créer une action lorsqu'on clique sur un mot.
    Il y a du boulot (pour apprendre à l'utiliser) mais çà devrait le faire.

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

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Il y a du boulot (pour apprendre à l'utiliser) mais çà devrait le faire.- W
    J'ai déjà fait ça avec VB.net et avec javascript. Avec Tkinter ça me semble plus compliqué.

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

    Citation Envoyé par Arsene12 Voir le message
    J'ai déjà fait ça avec VB.net et avec javascript. Avec Tkinter ça me semble plus compliqué.
    Ouvrir la documentation, essayer de comprendre comment fonctionne le widget puis écrire des bouts de code qui reflètent les différents cas d'utilisation que vous projetez, c'est le boulot de base du programmeur dans la découverte d'un nouveau joujou. Puis vous pouvez même ouvrir une nouvelle discussion pour demander de l'aide en montrant ce que vous avez fait (après avoir cherché un peu sur Internet des exemples de code).

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

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,
    Ouvrir la documentation, essayer de comprendre comment fonctionne le widget puis écrire des bouts de code qui reflètent les différents cas d'utilisation que vous projetez, c'est le boulot de base du programmeur dans la découverte d'un nouveau joujou. Puis vous pouvez même ouvrir une nouvelle discussion pour demander de l'aide en montrant ce que vous avez fait (après avoir cherché un peu sur Internet des exemples de code).

    - W

    Il faut créer une (ou un) frame pour chaque rangée de bouton. On rajoute des boutons tant que la largeur de la frame n'atteint pas une certaine largeur. Dès qu'elle la dépasse, le nouveau bouton doit être ajouté dans la frame (ligne) du dessous. Pour ce qui est de la justification, c'est un peu plus compliqué. Il faut créér un padx pour chaque bouton sauf le premier et le dernier. Il n'est pas forcément le même pour tous les boutons de la même ligne et se détermine en fonction du nombre de boutons, de l'emplacement du bouton, de la taille totale des boutons mis côte à côte et de la marge qui reste pour atteindre le bord droit de la fenêtre à ne pas dépasser. Il existe surement une formule mathématique pour ça.

    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
    from tkinter import *
     
    root = Tk()
    root.geometry('500x500')
     
    n=1
     
    az = "but_frame" + str(n)
     
    az = Frame(root)
     
    Button(az, text='XXX',command=None, fg='white', bg='green').pack(side=LEFT)
    Button(az, text='XXX',command=root.quit, bg='red', fg='white').pack(side=LEFT)
     
    az.pack()
     
    n=n+1
     
    az = "but_frame" + str(n)
     
    az = Frame(root)
    Button(az, text='YYY', fg='white', bg='green', command=None).pack(side=LEFT)
    Button(az, text='YYY',command=root.quit, bg='red', fg='white').pack(side=LEFT)
     
    az.pack()
     
     
    root.mainloop()
    Je mettrai plus tard un code affichant un texte sur plusieurs lignes sans la justification.

Discussions similaires

  1. alignement vertical de bouton avec texte
    Par k-koo dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 15/01/2008, 21h08
  2. Bouton avec bitmap transparent
    Par eag35 dans le forum MFC
    Réponses: 2
    Dernier message: 14/09/2004, 16h15
  3. [FLASH MX] Bouton avec états différents
    Par Chucky69 dans le forum Flash
    Réponses: 5
    Dernier message: 24/08/2004, 12h01
  4. [MFC] bouton avec option "accept files"
    Par bigboomshakala dans le forum MFC
    Réponses: 4
    Dernier message: 23/06/2004, 16h15
  5. Construire chemin sur bouton avec évt Javascript
    Par Ph. B. dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/05/2003, 10h26

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