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

Python Discussion :

Problème pour centrer un label en tkinter [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2023
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2023
    Messages : 24
    Par défaut Problème pour centrer un label en tkinter
    Bonjour à tous, je rencontre actuellement un problème pour centrer un label dans ma page "home" en tkinter tout comme le démontre le titre...
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from tkinter import *
     
    home= Tk()
     
    q1 = Label(home, text="Quelle est la capitale de l'Algérie ?",justify="center")
     
    q1.grid()
     
     
    home.mainloop()
    Voici le rendu:
    Nom : aserztg.PNG
Affichages : 454
Taille : 2,4 Ko

    Je vous ai normalement tout dit... n'hésitez pas à me redemander des informations si besoin

    Merci à ceux qui accepterons de m'aider

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Il faut rendre colonne et ligne extensibles avec columnconfigure et rowconfigure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from tkinter import Tk, Label
     
    home = Tk()
     
    home.columnconfigure(0, weight=1)  # Rend la colonne extensible
    home.rowconfigure(0, weight=1)  # Rend la ligne extensible
     
    q1 = Label(home, text="Quelle est la capitale de l'Algérie ?", justify="center")
    q1.grid(row=0, column=0, sticky="nsew")
     
    home.mainloop()
    En gros, Cela signifie que la colonne 0 et la ligne 0 s'adapteront à la taille de la fenêtre !

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2023
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2023
    Messages : 24
    Par défaut Recherches supplémentaires
    Merci pour ta réponse aussi rapide

    Pourrais-tu me dire comment faire pareil avec les autres stp
    Voici le rendu actuel ainsi du rendu que je souhaiterais:

    Nom : appeller_print().PNG
Affichages : 416
Taille : 11,9 Ko

    Voici le code actuel:
    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
    from tkinter import *
     
    home = Tk()
     
    home.columnconfigure(0, weight=1)  # Rend la colonne extensible
    home.rowconfigure(0, weight=1)  # Rend la ligne extensible
     
    q1 = Label(home, text="Quelle est la capitale de l'Algérie ?", justify="center")
     
     
    r1_q1 = Button(home, text="Oran", justify="center")
    r2_q1 = Button(home, text="Alger", justify="center")
    r3_q1 = Button(home, text="Annaba", justify="center")
     
    q1.grid(row=0, column=0, sticky="nsew", padx=(60,60))
    r1_q1.grid(pady=(0,5))
    r2_q1.grid(pady=(0,5))
    r3_q1.grid(pady=(0,5))
     
    home.mainloop()

  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
    Vous avez demandé à grid d'allouer la place disponible à la colonne/ligne 0...
    C'est ce qu'il fait... et si vous passez la fenêtre en plein écran çà a des conséquences.

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

  5. #5
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2023
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2023
    Messages : 24
    Par défaut
    Re-bonjour,
    je te remercie pour ta réponse.

    Peux tu m'en dire d'avantage stp
    Je ne comprend pas encore comment changer cela.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Comment dire mieux, ça été dit deux fois de manière différente, après il fallait comprendre ce que sont ces rowconfigure et columnconfigure pour comprendre ce que ça fait et une logique apparaît
    Qui puis est la stratégie d'une interface doit être défini entièrement, pas au fur et à mesures qu'on vous propose un code, pour éviter de modifier sans arrêt ce qu'on vous présente.

    Citation Envoyé par fred1599
    Cela signifie que la colonne 0 et la ligne 0 s'adapteront à la taille de la fenêtre !
    Citation Envoyé par wiztricks
    Vous avez demandé à grid d'allouer la place disponible à la colonne/ligne 0
    On peut guère faire plus clair, on comprend le problème rapidement...

    Maintenant qu'on sait ça il y a plusieurs stratégie, et tkinter est assez basique niveau esthétique, donc j'ai pensé que le container de widgets (Frame) était la solution la plus adaptée à votre problème... et y est ajouter un système permettant de gérer la largeur max des boutons proposant les solutions à vos questions.

    Avant de demander, essayez de comprendre tout ça, mettez-y des commentaires sur chaque ligne qui vous semble compliqué.

    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
    from tkinter import Tk, Label, Button, Frame
    from tkinter.font import Font
     
     
    def set_uniform_button_width(buttons):
        max_length = max(len(button["text"]) for button in buttons)
     
        for button in buttons:
            button.config(width=max_length)
     
     
    home = Tk()
    home.columnconfigure(0, weight=1)
    home.rowconfigure(0, weight=1)
     
    family_font, size_font = "Helvetica", 10
    custom_font = Font(family=family_font, size=size_font)
     
    center_frame = Frame(home)
     
    q1 = Label(
        center_frame,
        text="Quelle est la capitale de l'Algérie ?",
        justify="center",
        font=custom_font,
    )
    q1.pack()
     
    button_texts = ["Oran", "Alger", "Annabal"]
     
    buttons = []
    for text in button_texts:
        button = Button(center_frame, text=text, font=custom_font)
        button.pack()
        buttons.append(button)
     
    center_frame.grid(row=0, column=0)
    set_uniform_button_width(buttons=buttons)
     
    home.mainloop()

  7. #7
    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 TTCFRANCE Voir le message
    Je ne comprend pas encore comment changer cela.
    Ben il faut apprendre... pour essayer de comprendre. Ce qui passe par trouver un bon tuto, faire des exercices et une lecture active de la documentation (impossible d'être complètement débutant pour se lancer dans tkinter!).

    Si je reprend votre dernier code pour le faire tomber en marche ça donnerait:

    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
    from tkinter import *
     
    home = Frame()
     
    q1 = Label(home, text="Quelle est la \ncapitale de l'Algérie ?", justify=CENTER)
     
     
    r1_q1 = Button(home, text="Oran")
    r2_q1 = Button(home, text="Alger")
    r3_q1 = Button(home, text="Annaba")
     
    q1.grid(sticky="ew")
    r1_q1.grid(sticky="ew")
    r2_q1.grid(sticky="ew")
    r3_q1.grid(sticky="ew")
     
    home.place(relx=0.5, rely=0.5, anchor='center')
     
    home.mainloop()
    Il est très différent de celui de fred1599. Juste pour montrer qu'il y a plusieurs chemin à explorer pour construire la solution à un problème...
    Vous remarquerez aussi que ce n'est pas de la peinture: justify=CENTER ne fait pas la même chose qu'un sticky=EW...
    Vu de loin, le code est similaire (au votre). Du coup, savoir à quoi sert chaque option... plutôt que d'en mettre des tartines en espérant que ça va le faire est important.
    (j'utilise le même principe de la Frame intermédiaire).

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

  8. #8
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2023
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2023
    Messages : 24
    Par défaut
    Merci beaucoup pour votre temps...

    Je vais continuer ce projet avec vos conseils

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour centrer verticalement dans un tableau
    Par navis84 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 18/07/2006, 16h56
  2. pour centrer un bouton
    Par darkmalak01 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 28/09/2005, 08h31
  3. Probleme pour centrer un bloque xhtml/Css
    Par tooms2028 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 20/01/2005, 22h08
  4. [ETAT] problème pour centrer un sous-état
    Par tonio-lille dans le forum IHM
    Réponses: 13
    Dernier message: 11/10/2004, 12h28

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