我希望彼此堆叠两个树视图并使列对齐。我认为这样做的方法是以某种方式使用gtk.SizeGroup
。但是,gtk.TreeViewColumn
不是小部件......我该怎么做?
答案 0 :(得分:1)
我有两点建议:
gtk.SizeGroup
的实施方式,看看您是否可以编写自己的TreeViewColumnSizeGroup
。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)
即使没有显示列标题,这也有效。