在信号期间获取GtkTreeView中的新选择

5 投票
1 回答
3068 浏览
提问于 2025-04-16 04:15

我想要在我的 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(),我就能得到正确的选择。你知道该怎么解决这个问题吗?

1 个回答

7

我不太清楚 toggle-cursor-row 是干嘛用的(文档里没有任何说明,真让人烦),不过我觉得处理这个信号可能不太对。

相反,你应该连接到 GtkTreeSelection 的 changed 信号。这个信号会处理所有选择变化的事件,所以你也不需要连接其他的信号了。

撰写回答