我在一个流程框里有一组标签,问题是我希望这些标签最多有96px宽。我已经准备好了label.set_ellipsize(没错),但由于流箱给了他们想要的最大空间,所以他们没有被省略号,即使我已经将他们的大小请求设置为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()
您还有另一个选择:使用自定义GtkContainer实现,该实现将其子级限制为精确的像素宽度。根据埃里克·佩雷斯·卡斯特拉诺斯irc.gimp.net/#gtk+,GNOME Contacts有一个;here it is。它在Vala中,但不应该太难理解GtkWidget和GtkContainer(和GtkBin)语义。很遗憾,我不知道如何在Python中创建新的gobject,对不起。在
如果在gnomecontacts中使用这种方法,那么定制容器(它派生自GtkBin,这对于单个子GtkContainers来说是一种方便)将只保存GtkLabel,并将其添加到flowbox项的GtkVBox中。在
希望有帮助。在
所以这里有一个解决方案(仍然不是精确的像素宽度)你可以使用Gtk.Widget.set-u-halign不进行水平扩展。在
以下是部分代码:
它看起来是这样的:
我希望这次我没有错过什么。在
相关问题 更多 >
编程相关推荐