2011-04-18 94 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