0
我正在尋找一種方法,用python gtk/pango預先計算可變長度的文本字符串的寬度。 我想用它來調整文本大小自動填充給定的空間,對於可以以不同分辨率顯示的GUI以及標籤或按鈕的文本或任何應該調整到給定分辨率的GUI,以便使用最大可能的字體大小而無需制動邊界。計算pygtk 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)
它建立一個臨時的隱形標籤設置參數,只要測得的延伸縮小它大於最大值。允許的大小。
如果還有一些其他功能可以獲得文本的「填充」,我很樂意聽到。