2010-05-08 26 views
0

我在擴展gtk.TreeView的類中有一些代碼,這是init方法。我想創建一個有3列的樹視圖。切換按鈕,標籤和用戶可以輸入內容的下拉框。下面的代碼工作,除了切換按鈕不響應鼠標點擊和標籤和ComboEntry沒有繪製。 (所以我想你可以說它不起作用)。然而,我可以添加行。在PyGtk中設置GtkTreeViews時遇到的麻煩

所有的
#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

首先,你需要創建一個模型boolstrstr列,不是你現在正在做的方式。其次,你需要綁定適當模型列的渲染器的屬性,例如在

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

然後,你需要在渲染器設置editable屬性True。最後,您需要自己處理信號(changedediting-done,具體取決於渲染器類型)並相應更新商店。

它可能更容易使用一些助手,例如, Py-gtktree - 甚至還有一個編輯樹的例子。

+0

犯錯,append_column爲gtk.TreeView只需要1個參數,不是嗎? – 2010-05-08 18:42:04

+0

對,我的錯誤。見編輯的答案。 – doublep 2010-05-08 18:51:38

1

只需連接gtk.CellRendererToggle中的toggled信號,當您點擊它時,它會發出該信號,然後在您的回調中更改模型中的值。

ej。

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

self.model是asociated到TreeView模型,