5

我想检测何时选择我的gtk.TreeView更改,并在更改时调用带有此信息的函数。到目前为止,我发现这样做的唯一方法是附加到所有这些信号:

...
    self.sitterView.connect("cursor-changed", self.selectionChanged)
    self.sitterView.connect("unselect-all", self.selectionChanged)
    self.sitterView.connect("toggle-cursor-row", self.selectionChanged)
    self.sitterView.connect("select-all", self.selectionChanged)    
...
def selectionChanged(self, treeview):
    foo(self.sitterView.get_selection().get_selected())

但是,我从回调中获得的选择似乎是“延迟的”。也就是说,它显示上一个回调完成后的选择。例如,如果我不断地按住 CTRL+单击一行,当该行从取消选中变为选中时,foo 没有被选中,而当该行从选中变为取消选中时,它被选中。但是,如果我get_selection().get_selected()稍后再打电话,我会得到正确的选择。知道如何处理这个吗?

4

1 回答 1

7

我不确定是什么toggle-cursor-row(文档令人沮丧的是空的),但我认为这是错误的信号处理。

相反,您应该连接到 GtkTreeSelectionchanged信号。它应该处理所有选择更改事件,因此您也不需要连接到其他信号。

于 2010-09-17T03:55:13.870 回答