2011-04-18 2 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) 
    .... 

상자를 검사 할 수없는 것은 무엇입니까?

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

답변

3

면책 조항 : 나는 확신이 전체 기지국이 아니라, 순간을 테스트 할 수있는 항목은 다음과 같이 트 리뷰에 추가하는 경우 또한, 방법은 내가 토글을 설정합니다.

먼저 CellRendererToggle은 텍스트 속성을 사용하지 않습니다. 두 번째로, 어쨌든 그것을 설정한다면,리스트 스토어에 7 개의 컬럼 만 있기 때문에 컬럼 인덱스 7로 설정하지 않을 것입니다 (그리고 인덱스 7은 eigth 컬럼이됩니다).

reference에서 '속성'아래에있는 렌더러에 사용할 수있는 모든 속성을 볼 수 있습니다 (상속 된 속성에도 유의하십시오). 이제 각 셀 (행당)의 속성을 설정하기 위해 키워드 인수를 지정할 수 있습니다. 그래서 TreeviewColumn에이를 설정합니다 :

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

과 같이 설정된 모든 속성은 liststore의 항목을 해당 매핑됩니다. 즉, 목록 저장소에서 또는 콜백 (예 : on_toggle)을 통해 지시를 변경할 수 있음을 의미합니다.

편집 :

여기

가 작동 예입니다

어쩌면 당신은뿐만 아니라

편집 2 mode property을 설정해야합니다.

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

+0

나는 토글을 토글 할 수 없다. 코드는 다음과 같다 : https://github.com/JonnoFTW/5-of-Diamonds/blob/master/AoS-ServerBrowser.py, 특히 293, 308, 353, 356 with self.treeview.connect ("button_press_event", self.serverListEvent). 트리 뷰와 열에 다른 핸들러가 없습니까? –

+0

트리뷰 (treeview)와 컬럼 (column)에 대한 핸들러 사이의 충돌이라고 생각했습니다. 방금 토글 내용을 다른 청취자 내부로 옮겼습니다. –