我有一组标签在一个流式盒子中,问题是我希望这些标签最多只占用96像素的宽度。我已经设置了label.set_ellipsize(True),但由于流式盒子会给它们尽可能多的空间,它们不会被省略,即使我已将它们的大小请求设置为96像素宽。
我尝试了所有看起来与所有涉及的小部件相关的函数,但似乎没有什么效果。
我唯一找到的解决方法是使用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()
Gtk.Label.set_max_width_chars(n_chars)
吗? - elya5set_max_width_chars(n_chars)
和set_line_wrap(True)
结合使用,并设置好set_line_wrap_mode(pango.WrapMode.WORD_CHAR)
或者任何你想要的 WrapMode,那么它就可以工作了。如果想要实现精确像素宽度的解决方案,可能也需要启用 WrapMode。 - elya5