Пользовательские объекты в ListStore / TreeStore - PullRequest
6 голосов
/ 19 июля 2011

У меня есть список L объектов моего класса A. Этот класс реализует __str__ / __repr__, поэтому каждый объект имеет свое собственное строковое представление (необязательно уникальное). У меня есть графический интерфейс в Pygtk, где у меня есть виджет TreeView только с одним столбцом. Я хочу заполнить его строковыми представлениями объектов в L, но затем я хочу получить выбранные элементы как объекты, а не как строки. Есть ли способ заставить TreeView хранить список объектов, но отображать их как укусы? Если нет, то как лучше узнать, какие объекты выбраны в TreeView? Проблема также состоит в том, что в зависимости от некоторых условий я могу заполнить TreeView не целым L, а некоторым его подсписком, и поэтому индексы элементов в TreeView не будут соответствовать индексам в L.

Ответы [ 3 ]

6 голосов
/ 19 июля 2011

Вы можете сохранить объект в одном столбце (gobject.TYPE_PYOBJECT) и строковое представление во втором столбце, а затем отобразить только второй столбец в виде дерева. Аналогично тому, что сделано здесь: http://www.learningpython.com/2006/09/02/extending-our-pygtk-application/

1 голос
/ 25 июля 2011

Если ваш Glade 3.7.0 или новее, вы можете ввести «PyObject» (без кавычек) в качестве типа столбца для вашего ListStore. Затем используйте set_cell_data_func , чтобы извлечь объект из модели и передать его представление в CellRenderer в виде текста. Нет строковых столбцов для синхронизации и нет индексов, о которых нужно беспокоиться.

0 голосов
/ 20 июля 2011

Если строки уникальны, вы можете использовать словарь, чтобы связать строки с объектами, используя строки в качестве ключей.В этом случае вы можете найти объекты по его строке.

...