python GTK3限制标签宽度

dox*_*xin 11 python gtk label width gtk3

我在流程盒中有一组标签,问题是我希望这些标签最多可以达到96px.我已经设置了label.set_ellipsize(True),但由于flowbox为他们提供了尽可能多的空间,所以即使我已将其大小请求设置为96px宽,也不会进行椭圆化处理.

问题的例子

我已经尝试了我能找到的所有功能,这些功能似乎与所涉及的所有小部件相关,但似乎没有任何效果.

我找到的唯一解决方法是使用set_min_children_per_line(),但这需要计算流量宽度中的子节点数,这取决于每行子节点的数量,从而导致流量变得非常快.

我可能错过了一些显而易见的事情,但我已经在这几天抨击这个问题了.

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

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()
Run Code Online (Sandbox Code Playgroud)

ely*_*ya5 5

所以这是一个解决方案(仍然不是确切的像素宽度)您可以使用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)
Run Code Online (Sandbox Code Playgroud)

这就是它的样子: 窗口的screeshot

我希望这次我没有错过任何一件事.