GtkTreeviewColumn с различной моделью комбо для каждой строки - PullRequest
2 голосов
/ 26 августа 2010

У меня есть глобальный набор значений, например, ["Foo", "Bar", "Baz", "Quux"]. Каждая строка в моем TreeView представляет сущность, которая может иметь дело только с подмножеством этих значений. Например, первая строка может иметь дело с "Foo" и "Bar", а вторая - "Bar" и "Quux". Я хочу, чтобы столбец ComboBox позволял каждой строке выбирать одно из значений, с которыми он может иметь дело.

Однако из кода, который у меня есть сейчас, весь столбец может иметь только одну модель для ComboBox:

crc = gtk.CellRendererCombo()
crc.set_property('model', fooValuesModel)
crc.set_property('text-column', 0)
crc.set_property('editable', True)
crc.set_property('has_entry', False)

cl = gtk.TreeViewColumn(ctitle, crc, text=i)
treeView.append_column(cl)

У меня есть только одна возможность установить модель для всего столбца. Есть ли способ иметь разные хранилища для каждой строки или как-то фильтровать значения?

Ответы [ 2 ]

3 голосов
/ 26 августа 2010

То, что вы ищете, это gtk.TreeModelFilter. Это модель дерева, содержащая отфильтрованные значения другой базовой модели дерева. Вы можете решить, какие строки должны быть видны, вызвав set_visible_func() на отфильтрованной модели.

2 голосов
/ 03 мая 2011

Есть и другой способ сделать это.

Смотрите также: http://mail.gnome.org/archives/gtk-perl-list/2005-July/msg00065.html

(Это в Perl, но не должно быть слишком сложно конвертировать в Python)

Секрет в том, что:

Скажем, у вас есть TreeView, использующий TreeStore в качестве модели. И в одном из столбцов используется рендерер ячеек со списком, который будет получать модель ListStore на строку:

  1. Вы можете поместить ListStores в столбцы TreeStore, в perl это будет столбец типа Gtk2::ListStore. Конечно, вы не добавили бы столбец в TreeView, отображающий это напрямую. Вместо этого:

  2. Вы можете использовать столбец comboboxcell для использования этого столбца из Treeview в качестве его ListStore при добавлении его в древовидное представление, используя «insert_column_with_attributes» и подключая атрибут «model» к столбцу ListStore TreeStore.

  3. Когда вы добавляете строку в древовидное представление, просто поместите полный ListStore в столбец ListStore TreeStore. Затем вы можете заполнить ListStore для каждой строки любыми желаемыми значениями.

...