2017-05-16 6 views
0

私は選択可能な項目の表を作成するためにListStoreに裏打ちされたPyGTK 2.0の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) 

はエラーを生成します。

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

関数の引数を*argsに置き換えると、pathdataしか提供されません。

set_select_functionの動作の他に、1回のクリックで行選択を切り替える最良の方法は何ですか。データモデルの列と同期するにはどうすればよいですか?

答えて

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) 
関連する問題