Python gtk/pango を使用して可変長のテキスト文字列の幅を事前に計算する方法を探しています。テキストサイズを調整して特定のスペースを自動的に埋めるために使用したい、さまざまな解像度で表示できるGUI、ラベルやボタンのテキスト、または特定の解像度に調整する必要があるものなら何でもブレーキをかけずに可能な限り最大のフォントサイズを使用したい境界。
現在、回避策がありますが、それは遅い方法であり、もっと良い方法があるに違いないと思います:
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)
一時的に非表示のラベルを作成してパラメーターを設定し、測定された拡張が最大値よりも大きい限り縮小します。許容サイズ。
このテキストの「塗りつぶし」を取得する他の関数があれば、聞いていただければ幸いです。