Python 每次单击时分别切换TreeView行选择

Python 每次单击时分别切换TreeView行选择,python,pygtk,gtk2,gtktreeview,Python,Pygtk,Gtk2,Gtktreeview,我正在使用PyGTK2.0的TreeView,它由一个ListStore支持,以创建一个可选项表。我需要通过单击行上的任意位置来选择和取消选择单个行。单击一行应仅切换该行的高亮显示和复选框值 我已经创建了具有多个选择和复选框列的TreeView,但是如果不保持控制,我无法在单个行上切换选择。我尝试将选择函数连接到视图,以便它至少可以切换复选框,但该函数不起作用: 触发选择功能会产生错误: TypeError: on_row_selected() takes exactly 6 arguments

我正在使用PyGTK2.0的TreeView,它由一个ListStore支持,以创建一个可选项表。我需要通过单击行上的任意位置来选择和取消选择单个行。单击一行应仅切换该行的高亮显示和复选框值

我已经创建了具有多个选择和复选框列的TreeView,但是如果不保持控制,我无法在单个行上切换选择。我尝试将选择函数连接到视图,以便它至少可以切换复选框,但该函数不起作用:

触发选择功能会产生错误:

TypeError: on_row_selected() takes exactly 6 arguments (3 given)
将函数参数替换为
*args
表明只提供了
path
data


除了
set\u select\u函数
的行为外,通过单击切换行选择的最佳方法是什么,以及如何将其与数据模型中的列同步?

这并不完全是我想要的,但我最终获得了我想要使用的交互。这使我能够指定一个函数,该函数将在渲染单元格时调用。我使用它根据数据在整行上应用自定义样式,然后使用单选单击来切换值

    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)
    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)