2011-01-17 8 views
3

Ich habe eine feste Größe . Ich möchte den Text automatisch so skalieren, dass er in das Etikett passt. Gibt es eine elegante Möglichkeit, dies mit Schriftarten zu tun, die keine feste Breite haben?Wie ändere ich den Text automatisch, um ihn an ein PyGTK-Etikett fester Größe anzupassen?

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." 

Antwort

0

Ich hatte keine Zeit, dies zu testen, aber etwas in dieser Richtung tun sollten, was Sie wollen:

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 

Dies setzt voraus, dass Sie die Breite my_label direkt sind zwingen. Wenn my_label die Breite von einem anderen Element (wie einem übergeordneten Container) erhält, ersetzen Sie my_label.get_width() durch die maximale Breite, die Sie wünschen.

Im Wesentlichen wird die Schriftgröße immer um 1/10 Punkt reduziert, bis der Text endlich passt. Fühlen Sie sich frei, die Größe - = 100 zu jedem gewünschten Schritt zu verändern (je kleiner, desto langsamer, aber feinkörniger wird es).

Lassen Sie mich wissen, wenn das nicht ganz ist, und ich kann es später verfeinern.

+0

Ich bekomme die Idee, aber gtk.Label scheint nicht eine Funktion get_width zu haben. – williampli