Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tkinter - Trouver la taille prise par un texte

dans un canvas

Sujet résolu
    20 avril 2016 à 18:31:25

    Bonjour,

    Est-il possible d'obtenir la taille (en largeur/hauteur) prise par un texte contenu dans un canvas ?

    Par exemple, dans le bout de programme ci-dessous :

    from tkinter import *       
            
    def main():
    
        window = Tk()
        
        can = Canvas(master = window, 
                     width = 400,
                     height = 300,
                     bg = 'black')
                     
        can.pack()
    
        newgame = can.create_text(200,
                                  110,
                                  text = 'newgame',
                                  font = 'ArcadeClassic 20',
                                  fill = 'white')
                                            
        load_save = can.create_text(200,
                                    160,
                                    text = 'load save',
                                    font = 'ArcadeClassic 20',
                                    fill = 'white')
                                              
                                              
        print(can.itemcget(newgame, option = 'width'))
    
        window.mainloop()  
         
    main()

    J'affiche donc à l'écran une fenêtre telle que :

     

    Seulement la console m'indique que l'attribut width contient la valeur 0, j'imagine donc que le canvas traite l'objet text comme un seul point, puisque que la taille peut varier selon la police d'écriture utilisée. Ainsi, peut-on obtenir de manière détournée la place que prend un texte (inséré dans un canvas) comme celui-ci ? Merci d'avance pour votre aide. :)

    -
    Edité par Nordray 20 avril 2016 à 18:31:59

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      21 avril 2016 à 8:27:05

      Petite question, à quelle valeur t'attendais-tu ? Les deux premiers arguments de create_text représentent la position de l'item...

      Où se trouve indiqué l'argument width dans la création de ton item, je vois text, font et fill, mais width ?

      -
      Edité par Anonyme 21 avril 2016 à 8:27:29

      • Partager sur Facebook
      • Partager sur Twitter
        21 avril 2016 à 10:54:50

        C'est bien le problème, on ne peut pas l'obtenir via une méthode, je pense. J'ai réussi à me dégoter une petite manip pour y remédier cela dit.

         newgame_box = window.canvas.coords(newgame) + \
                      [len(window.canvas.itemcget(newgame, 'text')) * 13 + \
                       len(window.canvas.itemcget(newgame, 'text')) * 2, 13]
            # La place prise par le texte dans le canvas :
            # x, y, nombre de caractères * 13px + moyenne distance entre
            # les lettres * nombre de caractères, hauteur des caractères

        Il suffit avec un logiciel tierce de mesurer la distance moyenne entre chaque lettre et la hauteur unique du caractère (en fonction de la taille de la police). Ça paraît un peu barbare et artisanal vu comme ça mais je ne pense pas qu'on puisse faire autrement pour les raisons évoquées au dessus. Dans tous les cas, pour une application à police unique ça permet de résoudre le problème. 

        -
        Edité par Nordray 21 avril 2016 à 10:55:43

        • Partager sur Facebook
        • Partager sur Twitter

        Tkinter - Trouver la taille prise par un texte

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown