Добавить столбцы gtk.TreeView в группу размеров - PullRequest
0 голосов
/ 22 октября 2010

Я хочу сложить два дерева друг на друга и выровнять столбцы. Я решил, что способ сделать это будет использовать gtk.SizeGroup как-то. Однако gtk.TreeViewColumn не является виджетом ... как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 22 октября 2010

У меня есть два предложения:

  1. Посмотрите, как реализовано gtk.SizeGroup, и посмотрите, можете ли вы написать свой собственный TreeViewColumnSizeGroup.
  2. Подключение к notify::width каждогостолбец и в обратном вызове установите ширину соответствующего столбца в другом дереве.
0 голосов
/ 22 октября 2010

ОБНОВЛЕНИЕ: это последний код, который работал.В цикле я строю оба столбца вида одновременно, поэтому этой строки достаточно:

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)

Это работает, даже если заголовки столбцов не отображаются.

...