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 :

Centrer Widget Text & Coller scrollbar


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur bioinformaticien
    Inscrit en
    Avril 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 139
    Par défaut Centrer Widget Text & Coller scrollbar
    Bonjour tout le monde.

    Je débute en Python et j'ai quelques soucis avec le Widget Text de Tkinter.

    1. J'aimerais que le texte à l'intérieur du widget soit centré. J'ai compris qu'il fallait utiliser des tags pour appliquer ce paramètre, mais j'ai beau lire des tutoriels sur le net je ne comprends pas pourquoi mon code ne fonctionne pas.

    2. J'aimerais que le scrollbar vertical soit "collé/attaché" à mon widget Text. Mais j'ai beau appliquer différents paramètres column je n'y parviens pas.

    Voilà mon bout de code qui concerne le widget Text :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     import Tkinter as tk
    .
    .
    .
     
    self.scrollresults = tk.Scrollbar(self, orient=tk.VERTICAL)
    self.results = tk.Text(self,  width=70, wrap=tk.WORD, yscrollcommand=self.scrollresults.set)
    self.results.grid(row=8, column=0, columnspan=4, sticky=tk.N+tk.S)
    self.scrollresults.grid(row=8, column=3, sticky=tk.N+tk.S+tk.E)
    self.scrollresults.config(command=self.results.yview)
    self.results.tag_add('entier','1.0',tk.END)
    self.results.tag_config('entier', justify=tk.CENTER)
    Merci beaucoup de votre aide.

  2. #2
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Tu peut utilser l'option in_=self.results dans tous les directeurs de géométrie(pack(), place() et grid()) pour que ta Scrollbar soit a l'intérieur de ton wifget Text().
    Et il est toujours utile de se référer a help():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    from Tkinter import *
    a=Tk()
    b=Text(a)
    c=Scrollbar(a)
    help(b)
    help(c)
    Concernant le placement centrer si t'est dimension de widget Text() sont fixe c'est facile de jouer sur les index et le taille du text a insérer en fonction de la longueur du texte a insérer:
    en pseudo-code sa donne: Text.insert(('0.'+str(width-len(text_a_insérer))%2), text_a_insérer)#'jutilise % au cas ou la division par 2 ne donne pas un chiffre pair
    Mais fait très attention a la technique d'insertion insert(END, 'text_a_inserér') ou insert('0.0', 'text_a_insérer\n') ne crérons pas les meme indices car au le saut de ligne change de ligne donc l'index suivant sera '1.0' alors que avec END les indices seront 1.0, 1.10, 1.100, 1.1000 etc... mais je te laisse découvrir le syteme métrique des indexes du widget Text().

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur bioinformaticien
    Inscrit en
    Avril 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 139
    Par défaut ..
    Merci de m'avoir répondu !

    J'ai essayé de comprendre comment utiliser l'option in_=self.results. Par contre le résultat n'est pas celui que j'attendais.. Et je ne vois pas ce qui cloche. Le widget Text est "comprimé" malgré la précision sur sa taille width=70.

    Et pour centrer mon texte dans mon widget Text, j'avais déjà essayé la méthode en calculant à chaque fois la position mais cela ne fonctionne pas, cela me donne des erreurs d'index.
    Et je ne comprends pas trop les index justement dans le widget Text.

  4. #4
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Tu m'as donner une idée pour résoudre ton pb de Scrollbar: Si il fait width=70 alors pourquoi pas Text.grid(row=8, column=0, columnspan=70) et Scrollbar(row=8, column=70).
    Pour le centrage grace aux index explications supplémentaires: si tu utilise des '\n' pour l'insertion les index seront 1.1->1.9-> 1.10->1.70 (en faite de 1.0 a 1.70) sur la ligne 1 puis 2.1->2.9->2.10->2.70 (en faite de 2.0 a 2.70) sur la ligne 2 car 70 de largeur (sous réserve que le '\n' ne tronque pas la taille de la largeur) et si tu n'utilise pas de '\n' pour l'insertion les index seront 1.0->1.70->1.140>1.210>2.280 etc...
    Et toutes mes escuses pour l'erreur dans mon pseudo code: Text.insert(('0.'+str(width-len(text_a_insérer))%2) qui doit etre remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Text.insert('0.'+str(divmod(70-len(text_a_insérer),2)[0]))
    Text.insert('0.69', '\n')
    Text.insert('1.'+str(divmod(70-len(text_a_insérer),2)[0]))
    Text.insert('1.69', '\n')
    #etc...
    Perso le widget Text() est mon préférer car il présente l'avantage de fonctionner pas seulement en lignes mais aussi en colonnes.
    PS: Je préfere la doc pure (complète) que les tuts... rdv a: http://ftp-developpez.com/michel-aub...on/tkinter.pdf

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur bioinformaticien
    Inscrit en
    Avril 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 139
    Par défaut :-)
    En fait mon width=70, j'ai mis 70 parce que le rendu était le meilleur. Mais pourquoi créer 70 colonnes ??? je ne vois pas trop l'intérêt ! Mon interface présente 4 colonnes. Donc je ne vois pas l'intérêt d'en créer 70.

    Pour l'insertion de mes lignes dans mon widget Text, je le fais comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for y in range (0, len(ficheresultats),1) :
    	self.results.insert(tk.END, ficheresultats[y])
    J'ai créé une "fiche" de résultats qui est une liste (ficheresultats) contenant toutes mes Strings. Et donc après il ne me reste plus qu'à insérer chaque String (qui se terminent par un "\n") dans mon widget Text results grâce à la ligne de code ci-dessus.

  6. #6
    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,

    Citation Envoyé par phoenix420 Voir le message
    En fait mon width=70, j'ai mis 70 parce que le rendu était le meilleur. Mais pourquoi créer 70 colonnes ??? je ne vois pas trop l'intérêt ! Mon interface présente 4 colonnes. Donc je ne vois pas l'intérêt d'en créer 70.
    Voici qui risque d'être compris de travers.
    width c'est pour la taille du Widget, cela n'as rien à voir avec le nombre de caractères (colonnes pour vous ?) et donc l'index.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import Tkinter as Tk
     
    root=Tk.Tk()
    t=Tk.Text(root, width=4, height=5)
    t.pack()
    t.insert(Tk.END, '123456789')
    print t.index(Tk.END)
    root.mainloop()
    2.0
    @+

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/05/2014, 12h25
  2. Scrollbare avec un widget Text
    Par panthere_noire dans le forum Tkinter
    Réponses: 8
    Dernier message: 26/09/2008, 14h33
  3. [tkinter] widget text et scrollbar
    Par jojolapine dans le forum Tkinter
    Réponses: 3
    Dernier message: 29/04/2006, 15h58
  4. Comment centrer un Texte dans un rectangle ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 21h56
  5. Centrer un texte dans un string Grid
    Par christine dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/10/2002, 22h33

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