Python 在PyGtk中设置GTKTreeview时出现问题

Python 在PyGtk中设置GTKTreeview时出现问题,python,gtk,pygtk,gtktreeview,Python,Gtk,Pygtk,Gtktreeview,我在一个扩展了gtk.TreeView的类中有一些代码,这是init方法。我想创建一个有3列的树视图。一个切换按钮、一个标签和一个下拉框,用户可以在其中键入内容。下面的代码可以工作,除了切换按钮不会对鼠标单击做出反应,并且不会绘制标签和ComboEntry。(所以我想你可以说它不起作用)。但是,我可以添加行 #make storage enable/disable label user entry self.tv_store = gtk

我在一个扩展了
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])

首先,您需要创建一个包含
bool
str
str
列的模型,而不是现在这样做。其次,需要从适当的模型列绑定渲染器的属性,例如

self.columnButton = \
    gtk.TreeViewColumn ('Enabled', self.buttonRenderer, 
                        active = 0)  # 0 is the tree store column index
然后需要将渲染器上的
editable
属性设置为
True
。最后,您需要自己处理信号(
更改
编辑完成
,具体取决于渲染器类型),并相应地更新存储

使用一些助手可能更容易,例如。
-这里甚至有一个编辑树的例子。

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

self.columnButton = \
    gtk.TreeViewColumn ('Enabled', self.buttonRenderer, 
                        active = 0)  # 0 is the tree store column index
然后需要将渲染器上的
editable
属性设置为
True
。最后,您需要自己处理信号(
更改
编辑完成
,具体取决于渲染器类型),并相应地更新存储

使用一些助手可能更容易,例如。
-这里甚至有一个编辑树的示例。

只需连接gtk.cellRenderToggle中的
切换的
信号,当您单击它时,它将发出该信号,然后在回调中更改模型中的值

ej


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

只需连接gtk.cellRenderToggle中的
切换的
信号,当您单击它时,它将发出该信号,然后在回调中更改模型中的值

ej


self.model
模型是否与treeview关联,

err,append_列表示gtk。treeview仅接受1个参数,否?err,append_列表示gtk。treeview仅接受1个参数,否?