0

我想将两个树视图相互堆叠并对齐列。我认为做到这一点的方法是使用gtk.SizeGroup某种方式。但是,gtk.TreeViewColumn不是小部件......我该怎么做?

4

2 回答 2

1

我有两个建议:

  1. 看看是怎么gtk.SizeGroup实现的,看看能不能自己写TreeViewColumnSizeGroup
  2. 连接到notify::width每一列,并在回调中设置另一个树视图中相应列的宽度。
于 2010-10-22T06:39:08.200 回答
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)

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

于 2010-10-22T17:38:58.190 回答