4 votes

Comment redimensionner automatiquement un texte pour qu'il s'adapte à une étiquette PyGTK de taille fixe ?

J'ai une taille fixe gtk.Label . J'aimerais redimensionner automatiquement le texte pour qu'il tienne dans l'étiquette. Existe-t-il une manière élégante de le faire avec des polices qui ne sont pas à largeur fixe ?

my_label = gtk.Label()

# Short text segment
my_label.set_text( "Short text segment." )

# Long text segment
### Determine required text size here. ###
my_label.set_text( "This is a really long text segment that I would like to resize."

0voto

Robru Points 31

Je n'ai pas eu le temps de tester cela, mais quelque chose de ce genre devrait faire ce que vous voulez :

size = 12000 # thousandths of a point
temp_label = gtk.Label(my_label.get_text())
while temp_label.get_width() > my_label.get_width():
    size -= 100
    temp_label.set_attributes(pango.Attrlist().insert(pango.AttrSize(size))
my_label = temp_label

Cela suppose que vous forciez la largeur de my_label directement. Si my_label obtient sa largeur à partir de quelque chose d'autre (comme un conteneur parent), remplacez my_label.get_width() par la largeur maximale que vous souhaitez.

Essentiellement, il s'agit de réduire la taille de la police de 1/10e de point, encore et encore, jusqu'à ce que le texte s'adapte enfin. N'hésitez pas à ajuster la taille -= 100 à l'incrément que vous souhaitez (plus il est petit, plus il est lent mais plus il est fin).

Faites-moi savoir si ce n'est pas tout à fait ça et je pourrai l'affiner plus tard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X