python GTK3限制标签宽度

多辛

我在流程框中有一组标签,问题是我希望这些标签的最大宽度为96px。我已经设置了label.set_ellipsize(True),但是由于流框为它们提供了尽可能多的空间,因此即使我将其尺寸请求设置为96px宽,它们也不会椭圆化。

问题例子

我尝试了所有可以找到的似乎与所涉及的所有小部件都切向相关的函数,但是似乎没有任何作用。

我确实找到的唯一解决方法是使用set_min_children_per_line(),但这需要根据流框宽度计算子级数,该宽度取决于每行的子级数,从而导致流框真正快速地变宽。

我可能错过了一些显而易见的东西,但是几天来我一直在努力解决这个问题。

我制作了这个测试用例,当列的数量不能被两整除时,它会出现问题:

from gi.repository import Gtk as gtk
from gi.repository import Pango as pango

class Widget(gtk.VBox):
    def __init__(self,label):
        gtk.VBox.__init__(self)

        image=gtk.Image.new_from_icon_name("image-missing",gtk.IconSize.DIALOG)
        image.set_size_request(96,96)
        self.add(image)

        lbl=gtk.Label(label)
        self.add(lbl)


class TestCase(gtk.Window):
    def __init__(self):
        gtk.Window.__init__(self)
        lbl=gtk.Label("some text")
        scrollbox=gtk.ScrolledWindow()
        self.add(scrollbox)
        flowbox=gtk.FlowBox()
        scrollbox.add(flowbox)
        for i in range(50):
            w=Widget("longlabel"*5)
            flowbox.add(w)
            w=Widget("short")
            flowbox.add(w)

if __name__=="__main__":
    w=TestCase()
    w.connect("delete-event",gtk.main_quit)
    w.show_all()
    gtk.main()
elya5

因此,这是一个解决方案(仍然不是确切的像素宽度),您可以使用Gtk.Widget.set_halign强制不进行水平扩展。

这是代码的一部分:

    lbl=gtk.Label(label)
    lbl.set_max_width_chars(5)
    lbl.set_ellipsize(pango.EllipsizeMode.END)
    lbl.set_halign(gtk.Align.CENTER)
    self.add(lbl)

看起来是这样的: 窗口的画面

我希望这次我不要错过任何东西。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章