логика gtk за древовидными столбцами, нуждающимися в средствах визуализации ячеек - PullRequest
0 голосов
/ 20 августа 2010

Из того, что я понимаю о GTK, если у меня есть TreeView, я не могу просто использовать любой виджет, который хочу отображать информацию о столбце. Для текста вам нужен gtk.CellRendererText. Для кнопок переключения: gtk.CellRendererToggle. Для чего-то еще, кажется, вы должны реализовать себя, что, из примера для кнопок, которые я видел, не выглядит простым.

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

1 Ответ

2 голосов
/ 21 августа 2010

Чтобы написать собственный CellRenderer ( скопированный с этой ссылки! ):

  • Зарегистрируйте некоторые новые свойства, которые ваш рендерер нужен с системой типов и напишите свои set_property и get_property функции для установки и получения свойства вашего нового средства визуализации.

  • Напишите свой собственный cell_renderer_get_size функционировать и переопределить родительский функция объекта (обычно родитель имеет тип GtkCellRenderer. Обратите внимание, что ты должен соблюдать стандарт свойства для заполнения и ячейки выравнивание родительского объекта здесь.

  • Напишите свой собственный cell_renderer_render функционировать и переопределить родительский функция объекта. Эта функция делает фактический рендеринг.

И есть хороший / простой пример для pyGTK.

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


Логика этого дизайна - гибкость. TreeViewColumn указывает, как данные (из TreeModel) должны отображаться CellRenderer, таким образом TreeViewColumn, который представляет значение логического типа, может отображаться в виде текста (CellRendererText) или может отображаться в виде флажка (CellRendererToggle). например TreeViewColumn, который представляет значение целочисленного типа, может отображаться в виде текста (CellRendererText) или может отображаться в виде индикатора выполнения (CellRendererProgress) или может отображаться в виде кнопки вращения (CellRendererSpin) или может отображаться как все, что мы хотим .

...