ОБНОВЛЕНИЕ: это последний код, который работал.В цикле я строю оба столбца вида одновременно, поэтому этой строки достаточно:
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)
Это работает, даже если заголовки столбцов не отображаются.