Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pygtk pango中计算文本填充的文本字符串大小_Python_String_Width_Pygtk_Pango - Fatal编程技术网

Python 在pygtk pango中计算文本填充的文本字符串大小

Python 在pygtk pango中计算文本填充的文本字符串大小,python,string,width,pygtk,pango,Python,String,Width,Pygtk,Pango,我正在寻找一种方法,用python gtk/pango预先计算可变长度文本字符串的宽度。 我想用它来调整文本大小,自动填充给定的空间,对于一个可以以不同分辨率显示的GUI,标签或按钮的文本,或者任何应该调整到给定分辨率的东西,以便使用最大可能的字体大小,而不带边界 我现在有一个解决办法,但这是一个缓慢的方法,我认为一定有更好的方法: def ButtonSchriftAnpassen(self, AktiverButton, InBox): '''function to set up f

我正在寻找一种方法,用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()
(摘自)