gpt4 book ai didi

python - 计算pygtk pango中文本字符串的大小以进行文本填充

转载 作者:行者123 更新时间:2023-11-30 23:36:37 25 4
gpt4 key购买 nike

我正在寻找一种方法来使用 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)

它会构建一个临时的不可见标签,设置参数并缩小它,只要测量的延伸大于最大值。允许的大小。

如果有其他函数可以“填充”文本,我将不胜感激。

最佳答案

您基本上只需使用 pango 渲染字符串,然后获取大小。

示例:

def get_pango_string_size(str, font_name=TEXT_FONT):   
label = gtk.Label()
pango_layout = label.get_layout()
pango_layout.set_markup(str)
pango_font_desc = pango.FontDescription(font_name)
pango_layout.set_font_description(pango_font_desc)
return pango_layout.get_pixel_size()

(取自 http://python.6.x6.nabble.com/Getting-string-with-in-pixels-td1944346.html )

关于python - 计算pygtk pango中文本字符串的大小以进行文本填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16379496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com