如何使IconView中的图标均匀展开?

时间:2011-11-01 15:00:47

标签: python resize gtk window pygtk

我有一个带有几个图标的gtk.IconView。有时我会调整窗口大小以查看更多图标。当我这样做时,生成的额外空间不会在所有列之间均匀分布。相反,它们都被放在右边,直到有足够的空间容纳新列。

我在the documentation中没有看到任何可以让我自动执行此操作的内容。我是否需要检查调整大小信号,然后手动设置列和行间距?如果是这样,我会使用哪个调整大小信号。

这是我的意思的图片。我用红色标记了额外的空间。

enter image description here

这是我想看到的(当然,间隙实际上是均匀间隔的,不像我糟糕的MS Paint工作)。

enter image description here

3 个答案:

答案 0 :(得分:1)

我们在Ubuntu Accomplishments Viewer中遇到了这个问题,当我们设法解决它时,我会提出我们的解决方案。

诀窍是将GtkIconView置于GtkScrolledWindow 中,并将其hscrollbar_policy设置为“always”。然后,必须使用检查调整大小信号,以在用户调整窗口大小时作出反应(注意,如果大小已经改变则必须检查它,因为当例如拖动窗口时也发出信号)。当大小改变时,必须清除并重新创建GtkIconView使用的模型,因为这会触发GtkIconView正确地重新分配新获得的空间(或缩小)。 另外,结果将永远不会看到水平滚动条,因为GtkIconView使用了与GtkScrolledWindow一样多的空间。

答案 1 :(得分:0)

是的,看起来非常肥胖,你需要自己做。并且重新调整信号,我会检查 GtkContainer :: check-resize

答案 2 :(得分: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)

似乎为我工作