我想将两个树视图相互堆叠并对齐列。我认为做到这一点的方法是使用gtk.SizeGroup
某种方式。但是,gtk.TreeViewColumn
不是小部件......我该怎么做?
问问题
594 次
2 回答
1
我有两个建议:
- 看看是怎么
gtk.SizeGroup
实现的,看看能不能自己写TreeViewColumnSizeGroup
。 - 连接到
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 回答