2017-05-16 115 views
0

我使用由ListStore支持的PyGTK 2.0的TreeView創建可選項目表。我需要通過單擊該行的任何位置來選擇和取消選擇單個行。點擊一行應該只爲該行切換高亮和一個複選框的值。每次點擊切換TreeView行選擇

我已經爲複選框創建了具有多個選擇和列的TreeView,但是我無法在沒有保存控件的情況下在單個行上切換選擇。我試圖將一個選擇功能連接到視圖,以便將至少切換複選框,但功能不工作as described in the tutorial

self.dataview = gtk.TreeView(store) 
    self.dataview.get_selection().set_mode(gtk.SELECTION_MULTIPLE) 
    self.dataview.get_selection().set_select_function(self.on_row_selected, None) 

def on_row_selected(self, selection, model, path, is_selected, data): 
    print selection 
    print model 
    print path 
    print is_selected 
    print data 
    model.set_value(path, 0, is_selected) 

觸發select函數產生一個錯誤:

TypeError: on_row_selected() takes exactly 6 arguments (3 given) 

*args代替函數參數表明只提供了pathdata

另外的set_select_function的行爲,什麼是切換到單次點擊行選擇最好的方法,以及如何同步,隨着我的數據模型中的列?

回答

0

這不完全是我所要求的,但我終於得到了我想要的使用gtk.TreeViewColumn.set_cell_data_func的互動。這允許我指定一個函數,當一個單元格被渲染時,這個函數將被調用。我使用它根據數據在整行上應用自定義樣式,然後使用單選單擊來切換值。

self.view = gtk.TreeView(store) 
    self.view.get_selection().set_mode(gtk.SELECTION_SINGLE) 
    self.view.get_selection().set_select_function(self.on_row_selected) 
    ... 
    renderer = gtk.CellRendererText() 
    for idx, heading in enumerate(heading_list): 
     col = gtk.TreeViewColumn(None, renderer, text=idx) 
     col.set_cell_data_func(renderer, self.cell_data_func) 

... 

def cell_data_func(self, column, cell, model, it): 
    if model.get(it, self.select_index)[0]: 
     # apply selected style 
    else: 
     # apply normal style 

def on_row_selected(self, data): 
    path = data[0] 
    iter = self.model.get_iter(path) 
    val = self.model.get_value(iter, self.select_index) 
    self.model.set_value(iter, self.select_index, not val)