将gtk.TreeView列添加到大小组

时间:2010-10-21 22:42:46

标签: user-interface gtk gtktreeview

我希望彼此堆叠两个树视图并使列对齐。我认为这样做的方法是以某种方式使用gtk.SizeGroup。但是,gtk.TreeViewColumn不是小部件......我该怎么做?

2 个答案:

答案 0 :(得分:1)

我有两点建议:

  1. 了解gtk.SizeGroup的实施方式,看看您是否可以编写自己的TreeViewColumnSizeGroup
  2. 连接到每列的notify::width,并在回调中设置其他树视图中相应列的宽度。

答案 1 :(得分:0)

更新:这是最终的代码。在一个循环中,我同时构建了两个视图列,所以这一行就足够了:

col1.connect("notify::width", lambda col1,_,col2:col2.set_fixed_width(
    col1.get_width()), col2)

我认为没有“列小部件”的原因是主要区域只是gtk.gdk.Drawable,其中每个单元格渲染器都会绘制它们的东西。但是,每列都有 小部件的标题,因此我们可以使用它们来执行我们想要的操作。

选择一个视图作为“主要”视图,并将另一个视图设置为gtk.TREE_VIEW_COLUMN_FIXED大小调整。使用.forall()浏览“主要”视图的内部子窗口小部件。这些将是gtk.Buttons表示列标题。连接到他们的size-allocate活动。在该事件处理程序上,获取请求的宽度,以及从属视图上相应列的.set_fixed_width

    self._svcols = []
    def sizealloc(wid, alloc):
        ci = self._svcols.index(wid)
        cl = self.slaveView.get_column(ci)
        cl.set_fixed_width(alloc.width)

    def resizes(child):
        child.connect('size-allocate', sizealloc)
        self._svcols.append(child)

    self.mainView.forall(resizes)

即使没有显示列标题,这也有效。