2011-04-18 71 views
2

我正在使用帶複選框的樹形視圖。我希望用戶能夠點擊複選框,並將該項目添加到收藏夾列表中。但是目前我無法讓這些框切換。這是我的代碼:獲取複選框在GtkTreeView中切換

def draw_columns(self,treeview): 
    self.ren = gtk.CellRendererToggle() 
    self.ren.connect('toggled',self.on_toggle,treeview.get_model()) 
    self.tvfav = gtk.TreeViewColumn('Fav',self.ren,text=7) 
    for i in [self.tvfav,'andall the other columns']: 
     treeview.append_column(i) 

def on_toggle(self,cell,path_str,model): 
    toggle_item = model.get_value(iter,column) 
    toggle_item = not toggle_item 
# This method didn't work either 
## model[path_str][1] = not model[path_str][1] 
    if toggle_item: 
     #Add it to the favourite list if it isn't already 
     pass 
    else: 
     #remove it from the favourite list 
     pass 
    model.set(iter,column,toggle_item) 

def __init__(self):' 
    .... 
    self.liststore = gtk.ListStore(str,int, int, int,str, 'gboolean', str) 
    self.treeview = gtk.TreeView(self.liststore) 
    .... 

我在做什麼錯誤,該框無法檢查?此外,我將如何設置切換時,項目被附加到TreeView是這樣的:

if name in favourites: 
    #Append to list with checkbox on 
    self.liststore.append([name,x,y,z,ss,True,sss]) 

回答

3

免責聲明:我相信這是不是總BS,但目前無法進行測試。

首先,CellRendererToggle不會接受文本屬性。其次,如果您仍然設置它,則不會將其設置爲列索引7,因爲在列表存儲中只有7列(並且索引7將是第e列列)。

您可以在'屬性'下的reference中看到您可以爲您的渲染器設置的所有可用屬性(請注意繼承屬性)。現在,要爲每個單獨的單元格(每行)設置屬性,您可以像指定一樣指定關鍵字參數。所以在你的TreeviewColumn中你可以設置:

# 5 is the index of bool in the liststore 
gtk.TreeViewColumn('Fav',renderer,active=5) 

這樣的任何屬性都被映射到liststore中的相應條目。這意味着你可以直接在liststore上或者通過回調來改變它(例如on_toggle)。

編輯:

也許你有設置mode property以及

編輯2:

這裏是一個工作示例。

import gtk 


def on_toggle(cell, path, model, *ignore): 
    if path is not None: 
     it = model.get_iter(path) 
     model[it][0] = not model[it][0] 

model = gtk.ListStore(bool) 
tv = gtk.TreeView(model) 

cell = gtk.CellRendererToggle() 
cell.connect("toggled", on_toggle, model) 
col = gtk.TreeViewColumn("Foo", cell, active=0) 
tv.append_column(col) 

w = gtk.Window() 
w.connect("destroy", gtk.main_quit) 
w.show() 

w.add(tv) 
tv.show() 

## Some initial data 
model.append([True]) 
model.append([False]) 

gtk.main() 
+0

新增工作示例。 – XORcist 2011-04-19 13:20:07

+0

我仍然無法獲得切換切換,這裏是代碼:https://github.com/JonnoFTW/5-of-Diamonds/blob/master/AoS-ServerBrowser.py,特別是在293,308, 353,356與self.treeview.connect(「button_press_event」,self.serverListEvent)。可以樹視圖和它的列沒有不同的處理程序? – 2011-04-19 13:53:46

+0

想通了,它是樹視圖的處理程序和列之間的衝突。我只是將切換的東西移動到另一個偵聽器中。 – 2011-04-19 15:07:40