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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    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
    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 très actif

    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
    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.

  3. #3
    Membre éprouvé
    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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    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 éprouvé
    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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    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

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