Проблема с настройкой GtkTreeViews в PyGtk
У меня есть код в классе, который расширяет gtk.TreeView
и это init
метод. Я хочу создать древовидное представление с тремя столбцами. Кнопка переключения, метка и раскрывающийся список, в которые пользователь может вводить данные. Приведенный ниже код работает, за исключением того, что кнопка переключения не реагирует на щелчки мыши, а метка и ComboEntry не отображаются. (Так что, думаю, вы можете сказать, что это не работает). Я могу добавить строки очень хорошо, однако.
#make storage enable/disable label user entry
self.tv_store = gtk.TreeStore(gtk.ToggleButton, str, gtk.ComboBoxEntry)
#make widget
gtk.TreeView.__init__(self, self.tv_store)
#make renderers
self.buttonRenderer = gtk.CellRendererToggle()
self.labelRenderer = gtk.CellRendererText()
self.entryRenderer = gtk.CellRendererCombo()
#make columns
self.columnButton = gtk.TreeViewColumn('Enabled')
self.columnButton.pack_start(self.buttonRenderer, False)
self.columnLabel = gtk.TreeViewColumn('Label')
self.columnLabel.pack_start(self.labelRenderer, False)
self.columnEntry = gtk.TreeViewColumn('Data')
self.columnEntry.pack_start(self.entryRenderer, True)
self.append_column(self.columnButton)
self.append_column(self.columnLabel)
self.append_column(self.columnEntry)
self.tmpButton = gtk.ToggleButton('example')
self.tmpCombo = gtk.ComboBoxEntry(None)
self.tv_store.insert(None, 0, [self.tmpButton, 'example label', self.tmpCombo])
2 ответа
Прежде всего, вам нужно создать модель с bool
, str
а также str
колонны, а не так, как вы делаете сейчас. Во-вторых, вам нужно связать свойства визуализаторов из соответствующих столбцов модели, например, как в
self.columnButton = \
gtk.TreeViewColumn ('Enabled', self.buttonRenderer,
active = 0) # 0 is the tree store column index
Тогда вам нужно установить editable
собственность на рендере True
, И, наконец, вам нужно обрабатывать сигналы (changed
или же editing-done
, в зависимости от типа рендерера) и обновите магазин соответственно.
Может быть проще использовать некоторые помощники, например Py-gtktree - там даже есть пример для редактирования дерева там.
Просто подключите toggled
Сигнал в gtk.CellRendererToggle, когда вы нажимаете на него, он испускает этот сигнал, а затем в вашем обратном вызове меняет значение в модели.
EJ.
def toggle(self, cellrenderer, path):
Self.model[path][column] = not self.model[path][column]
self.model
это модель, связанная с деревом,