0

我在一个扩展的类中有一些代码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])
4

2 回答 2

2

首先,您需要创建一个带有bool,strstr列的模型,而不是现在的方式。其次,您需要从适当的模型列绑定渲染器的属性,例如

self.columnButton = \
    gtk.TreeViewColumn ('Enabled', self.buttonRenderer, 
                        active = 0)  # 0 is the tree store column index

然后您需要将editable渲染器上的属性设置为True. 最后,您需要自己处理信号(changedediting-done,取决于渲染器类型)并相应地更新存储。

使用一些帮助程序可能更容易,例如 Py-gtktree — 那里甚至还有一个编辑树的示例。

于 2010-05-08T15:27:32.047 回答
1

只需toggled在 gtk.CellRendererToggle 中连接信号,当您单击它时,它会发出该信号,然后在您的回调中更改模型中的值。

ej。

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

self.model是与树视图关联的模型,

于 2010-05-11T14:35:11.860 回答