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 :

Question de débutant.. : alignement d'un texte


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 5
    Par défaut Question de débutant.. : alignement d'un texte
    Salut !

    Voici pour commencer j'aimerais réaliser une chose basique : dans une fenêtre Tkinter, mettre un titre (centré) et deux phrases, l'une dernière l'autre et plaçées à gauche.
    Mais je n'y arrive pas : soit les 2 phrases sont l'une sur l'autre, soit l'une est bien plaçée à gauche et l'autre au centre ou soit elles sont centrées.
    J'ai un peu tout testé suivant la doc que j'ai trouvé :
    anchor=W
    justify=LEFT
    side=LEFT
    Comment faire ?

    Merci pour votre aide

    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
     
    # -*- coding: utf-8 -*-
    import Tkinter
     
    class simpleapp_tk(Tkinter.Tk):
        def __init__(self,parent):
            Tkinter.Tk.__init__(self,parent)
            self.parent = parent
            self.initialize()
     
        def initialize(self):
            txt1 = Tkinter.Label(self,text="""Titre\n""",fg='red',font=("Helvetica",15))
            txt1.pack()
     
            txt2 = Tkinter.Label(self,wraplength=550,text="""Ligne 1\n""",font=("Helvetica",10),anchor=Tkinter.W,justify=Tkinter.LEFT)
            txt2.pack()
     
            txt3 = Tkinter.Label(self,text="Ligne 2\n",font=("Helvetica",10,'bold'),anchor=Tkinter.W,justify=Tkinter.LEFT)
            txt3.pack()
     
     
     
    if __name__ == "__main__":
        app = simpleapp_tk(None)
        app.geometry("550x400+300+0")
        app.resizable(width=False,height=False)
        app.title('Mon programme')
        app.mainloop()

  2. #2
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    bonjour,

    Concernant ton probleme d alignement il serait preferable d utiliser un Canvas pour afficher tes textes il ne devrait te poser aucun probleme. Par contre si tu dois absolument utiliser un Label. Tu devrais utiliser la methode Label.place au lieu de Label.pack . Elle te permet de toi meme definir les coordonnees d encrage de ton label mais le resultat ne pourra etre tel qu avec un Canvas.
    A plus.
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  3. #3
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    J'ai coloré tes labels pour que tu voies ce qui se passe. Le justify fonctionne, mais il faut dire au pack d'ajuster les labels à la largeur maximale. Une fois que tu auras constaté, tu pourras rajouter en paramètre des pack
    fill=Tkinter.BOTH, expand=1
    Bonne continuation.

    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
    import Tkinter
     
    class simpleapp_tk(Tkinter.Tk):
        def __init__(self,parent):
            Tkinter.Tk.__init__(self,parent)
            self.parent = parent
            self.initialize()
     
        def initialize(self):
            txt1 = Tkinter.Label(self,text="""Titre\n""",fg='red',font=("Helvetica",15), bg='#f0f0f0')
            txt1.pack()
     
            txt2 = Tkinter.Label(self,wraplength=550,text="""Ligne 1\n""",font=("Helvetica",10),anchor=Tkinter.W,justify=Tkinter.LEFT, bg='#e0e0e0')
            txt2.pack()
     
            txt3 = Tkinter.Label(self,text="Ligne 2\n",font=("Helvetica",10,'bold'),anchor=Tkinter.W,justify=Tkinter.LEFT, bg='#f0f0f0')
            txt3.pack()
     
    if __name__ == "__main__":
        app = simpleapp_tk(None)
        app.geometry("%ix%i+%i+%i"%(550, 400, 300, 0))
        app.resizable(width=False,height=False)
        app.title('Mon programme')
        app.mainloop()
    Citation Envoyé par afranck64 Voir le message
    Tu devrais utiliser la methode Label.place au lieu de Label.pack.
    C'est un choix, le placement au pixel près n'est pas toujours le but recherché. La méthode grid() est celle qui me convient le mieux. L'important est de pas mélanger les trois, grid, place et pack. Les résultats seraient indéfinis

  4. #4
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Citation Envoyé par vali103
    Voici pour commencer j'aimerais réaliser une chose basique : dans une fenêtre Tkinter, mettre un titre (centré) et deux phrases, l'une dernière l'autre et plaçées à gauche.
    Je ne vois vraiment pas comment cela serait approchable avec Label.grid ou Label.pack . De plus en utilsant des Labels, à moins qu'ils ne soient transparents le plus avancé fera écran aux autres. Même dans le cas d'un positionnement au pixel près.
    D'ou... LE Canvas.
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  5. #5
    Membre Expert 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
    Par défaut
    Bonjour,

    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    import Tkinter
     
    class simpleapp_tk(Tkinter.Tk):
        def __init__(self, parent):
            Tkinter.Tk.__init__(self, parent)
            self.parent=parent
     
            txt1 = Tkinter.Label(self, text="Titre", fg='red', font=("Helvetica",15))
            txt1.pack()
     
            txt2 = Tkinter.Label(self, wraplength=550, text='Ligne 1', font=('Helvetica', 10), justify=Tkinter.LEFT)
            txt2.pack(side=Tkinter.LEFT)
     
            Tkinter.Label(self, text='Ligne 2', font=('Helvetica', 10, 'bold'), justify=Tkinter.LEFT).pack(side=Tkinter.LEFT)
     
    if __name__ == "__main__":
        app = simpleapp_tk(None)
        app.geometry("550x400+300+0")
        app.resizable(width=False, height=False)
        app.title('Mon programme')
        app.mainloop()
    Cela fait plaisir de voir un import Tkinter et non un from Tkinter import *.

    Utiliser un Canvas pour du texte ? Je sais que c'est devenu un 'fourre tout' mais il existe un Widget (Text) pour cela (Plus compliqué il est vrais). A la limite il est possible d'utiliser Frame comme conteneur (C'est sa vocation).

    La guerre des Geometry managers n'as pas lieu d'être, a chacun son utilité.
    Il est tout à fais possible de les mixer à condition de ne pas mélanger.

    Bon code

  6. #6
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Bonjour,
    J'avoue que je n'ai peut être pas bien compris ce qu'il voulait faire. Mais moi le "l'une derrière l'autre" ça me disait un truc du genre:
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    import Tkinter
     
    class simpleapp_tk(Tkinter.Tk):
        def __init__(self,parent):
            Tkinter.Tk.__init__(self,parent)
            self.can = Tkinter.Canvas(self)
            self.txt1 = self.can.create_text(180,10,text="Titre",font=("Helvetica",15),fill="red")
            self.txt2 = self.can.create_text(100,90,text="Ligne 1",font=('Helvetica', 20, 'bold'))
            self.txt3 = self.can.create_text(70,100,text="Ligne 2",font=('Helvetica', 32),fill="gray50")
            self.can.pack()
     
     
    if __name__ == "__main__":
        app = simpleapp_tk(None)
        app.geometry("550x400+300+0")
        app.resizable(width=False, height=False)
        app.title('Mon programme')
        app.mainloop()
    Et désolé d'avoir levé la casse. :mgreen:
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  7. #7
    Membre Expert 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
    Par défaut
    Bonjour afranck64,

    C'est sans doute moi qui est mal compris dans ce cas.
    Dans l'attente de la réponse de vali103 donc.

    @+

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

Discussions similaires

  1. [HTML 5] Alignement d'un texte et d'un bouton pour une débutante
    Par Gan_user dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/06/2015, 09h49
  2. Question de débutant : BDD Vs Fichier texte
    Par Beginner. dans le forum Débuter
    Réponses: 8
    Dernier message: 02/11/2014, 11h45
  3. Questions de débutant
    Par J-P-B dans le forum XMLRAD
    Réponses: 12
    Dernier message: 24/07/2003, 15h19
  4. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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