Я ищу метод для предварительного расчета ширины текстовой строки переменной длины с помощью python gtk/pango. Я хочу использовать его для настройки размера текста, автоматически заполняющего заданное пространство, для графического интерфейса, который может отображаться с разными разрешениями, а текст меток или кнопок или чего-либо еще должен подстраиваться под заданное разрешение, чтобы использовать максимально возможный размер шрифта без торможения границы.
Теперь у меня есть обходной путь, но это медленный метод, и я думаю, что должно быть что-то лучше:
def ButtonSchriftAnpassen(self, AktiverButton, InBox):
'''function to set up fint size of directory/category buttons to use max. amount of available space'''
if InBox == True:
AktiverButton.show()
GewollteBreite = AktiverButton.get_parent().get_allocation()[2]
GewollteHoehe = AktiverButton.size_request()[1]
MaximaleBreite = GewollteBreite
elif AktiverButton.get_label() == "HOME" or AktiverButton.get_label() == "Hauptmenue":
#print AktiverButton.get_label()
GewollteBreite = AktiverButton.size_request()[0]
GewollteHoehe = AktiverButton.size_request()[1]
MaximaleBreite = GewollteBreite -(0.2*GewollteBreite)#* 1000
else:
GewollteBreite = AktiverButton.size_request()[0]
GewollteHoehe = AktiverButton.size_request()[1]
MaximaleBreite = GewollteBreite # -(0.4*GewollteBreite)#* 1000
Schriftgroessenfaktor = GewollteHoehe * 1000
TempLabel = gtk.Label(AktiverButton.get_label())
TempPangoliste = pango.AttrList()
XTemp = pango.AttrSize(Schriftgroessenfaktor, start_index=0, end_index=-1)
TempPangoliste.insert(XTemp)
TempLabel.set_attributes(TempPangoliste)
AbmessungenTempLabel = TempLabel.get_layout().get_pixel_size()
while AbmessungenTempLabel[0] > MaximaleBreite:
Schriftgroessenfaktor = Schriftgroessenfaktor - 1000
XTemp = pango.AttrSize(Schriftgroessenfaktor, start_index=0, end_index=-1)
TempPangoliste.insert(XTemp)
TempLabel.set_attributes(TempPangoliste)
AbmessungenTempLabel = TempLabel.get_layout().get_pixel_size()
x = XTemp
Pangoliste = pango.AttrList()
Pangoliste.insert(x)
AktiverButton.child.set_attributes(Pangoliste)
Он создает временную невидимую метку, устанавливает параметры и сжимает ее до тех пор, пока измеренное расширение больше максимального. разрешенный размер.
Если есть какая-то другая функция для получения этого «наполнения» текста, я был бы признателен услышать.