我在流水箱中有一组标签,问题是我希望这些标签最多只能96px。我已经设置了label.set_ellipsize(True),但由于流量盒为他们提供了尽可能多的空间,所以即使我已将其大小请求设置为96px宽,也不会进行椭圆化处理。 / p>
我已经尝试了我能找到的所有功能,这些功能似乎与所涉及的所有小部件相关,但似乎没有任何效果。
我找到的唯一解决方法是使用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()
答案 0 :(得分: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)
这就是它的样子:
我希望这次我没有错过。
答案 1 :(得分:3)
您还有另一种选择:使用自定义GtkContainer实现,将其子项限制为精确的像素宽度。根据irc.gimp.net/#gtk+上的ErickPérezCastellanos,GNOME Contacts有一个; here it is。这是在Vala中,但它不应该太难以与你的GtkWidget和GtkContainer(以及GtkBin)语义的阅读相提并论。不幸的是,我不知道如何在Python中创建新的GObject,抱歉。
如果你确实在GNOME Contacts中使用这种方法,那么自定义容器(派生自GtkBin,便于单子GtkContainers)只能保存你的GtkLabel,你可以将它添加到流程图项目的GtkVBox。
希望这有帮助。