如何让IconView中的图标均匀分布?
我有一个gtk.IconView,里面放了好几个图标。有时候我会调整窗口的大小,以便能看到更多的图标。当我这么做的时候,增加的空间并不是在所有列之间均匀分配的。相反,所有的额外空间都集中在右边,直到有足够的空间来放下一列新的图标。
我在文档中没有找到可以让我自动做到这一点的方法。我需要检查窗口大小变化的信号,然后手动设置列和行之间的间距吗?如果是的话,我应该使用哪个大小变化的信号呢?
这里有张我想表达的图片。我用红色标出了多出来的空间。
这是我希望看到的效果(当然,间隙应该均匀分布,而不是我糟糕的MS Paint作品那样)。
3 个回答
0
使用事件 size_allocate。
我定义了我的类:
class toto(Gtk.IconView):
def __init__(self):
super(toto,self).__init__()
self.connect("size_allocate",self.resize)
self.set_columns(4)
然后我修改了工作列的数量
def resize(self,_iv,_rect):
print("X",rect.x)
print("Y",rect.y)
print("W",rect.width)
print("H",rect.height)
# calculate number of columns, let's say 3
_cols=3
self.set_columns(_cols)
对我来说,这似乎有效。
0
是的,看起来你可能需要自己去做这个。关于信号的部分,我建议你检查一下 GtkContainer::check-resize。
1
我们在使用Ubuntu的成就查看器时遇到了一个问题,经过努力解决后,我想分享我们的解决方案。
关键在于把GtkIconView放在GtkScrolledWindow里面,并把它的水平滚动条设置为“始终显示”。接下来,需要使用一个检查大小变化的信号,这样当用户调整窗口大小时就能做出反应(注意,这个信号在窗口被拖动时也会被触发,所以要检查一下大小是否真的变化了)。当窗口大小变化时,GtkIconView使用的模型需要被清空并重新创建,这样可以确保GtkIconView能够正确地利用新获得的空间(或者缩小空间)。另外,结果是水平滚动条将永远不会出现,因为GtkIconView正好使用了GtkScrolledWindow所使用的空间。