Я пытаюсь разработать приложение GTK на Python, и я действительно застрял с правильным использованием gtk.TreeStore
. Моя основная проблема: я уже проанализировал некоторые JSON, и у меня есть собственная структура данных, которая в основном представляет собой список Python и два типа объектов: один представляет собой набор элементов (коллекции не могут быть вложенными) и один для представления элементов ( которые могут отображаться как в списке, так и в коллекции).
Я уже знаком с базовым использованием TreeStore
и мне удалось правильно отобразить элементы на экране. Я не знаю, как быть с тем фактом, что хранилище дерева способно хранить только типы объектов (на данный момент я не уверен, потому что я мало знаю о системе типов объектов). В документации для C перечислены следующие (кроме PixBuf) базовые типы, которые могут быть вставлены и автоматически сопоставлены с типами данных Python:
Например, gtk_tree_store_new (3, G_TYPE_INT, G_TYPE_STRING, GDK_TYPE_PIXBUF); создаст новый GtkTreeStore с тремя столбцами типа int, string и GdkPixbuf соответственно.
Кроме того, в нем говорится, что вы можете вставить любой GType
. Ссылка из документации прямо указывает на этот абзац:
Числовое значение, представляющее уникальный идентификатор зарегистрированного типа.
Мое исследование темы заканчивается на этом, и Google находит в основном руководства по GTK 2.x и ничего о вставке других типов данных, кроме str
и int
и т. д.
Вопросы:
Можно ли реализовать новый GType (или любой другой интерфейс, который сделает возможной вставку пользовательских данных в хранилище дерева) и как это сделать?
Я уже пытался получить производные отGObject
, но это не помогло.Как я могу избавиться от одновременного хранения двух структур данных?
А именно, результат синтаксического анализа и дублирующаяся информация в Treestore.Как быть со смешанным содержимым?
В моем случае у меня есть коллекции и элементы с различной дополнительной информацией (которые отображаются в древовидной структуре как узлы с дочерними элементами или без них).
Если вышеуказанные вопросы решены, я также избавляюсь от проблемы при обработке выборки: трудно сопоставить простой тип, такой как str
или int
, с элементом, который я вставил ранее. Такой атрибут должен быть ключом, и все равно вам придется искать список с проанализированными результатами, что совершенно неэффективно.
Заранее спасибо!
Дополнительная информация, не имеющая прямого отношения к вопросу:
Я думал, что реализация пользовательского TreeModel
может быть реальной задачей, пока не прочитал это в руководство по GTK 2:
Однако за все это приходится платить: вряд ли вы напишете полезную пользовательскую модель менее чем в тысяче строк, если только не удалите все символы новой строки. Написание пользовательской модели не так сложно, как может показаться, и это может стоить затраченных усилий, не в последнюю очередь потому, что это приведет к гораздо более разумному коду, если у вас есть много данных для отслеживания.
Это все еще в силе?
Я только что наткнулся на http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-python.htm Может ли это быть полезным? Как и многие ресурсы, это для PyGTK 2.0. устарело.