проблем при настройването на GtkTreeViews в PyGtk

Имам някакъв код в клас, който разширява gtk.TreeView и това е методът init. Искам да създам дървовиден изглед, който има 3 колони. Бутон за превключване, етикет и падащо поле, в което потребителят може да въвежда неща. Кодът по-долу работи, с изключение на това, че бутонът за превключване не реагира на щраквания с мишката и етикетът и 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])

person Chris H    schedule 08.05.2010    source източник


Отговори (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 — там дори има пример за редактиране на дърво.

person doublep    schedule 08.05.2010
comment
грешка, append_column за gtk.TreeView приема само 1 аргумент, нали? - person Chris H; 08.05.2010

Просто свържете сигнала toggled в gtk.CellRendererToggle, когато щракнете върху него, той ще излъчи този сигнал, след което във вашето обратно извикване променете стойността в модела.

ej.

def toggle(self, cellrenderer, path):
        Self.model[path][column] = not self.model[path][column]

self.model е моделът, свързан с дървовидния изглед,

person markuz    schedule 11.05.2010