Получить новый выбор в GtkTreeView во время сигнала - PullRequest
5 голосов
/ 17 сентября 2010

Я хочу обнаруживать всякий раз, когда меняется выбор моего 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 Ответ

6 голосов
/ 17 сентября 2010

Я не уверен, что делает toggle-cursor-row (документация ужасно пуста), но я думаю, что это неправильный сигнал для обработки.

Вместо этого вы должны подключиться к сигналу GtkTreeSelection changed. Он должен заботиться обо всех событиях изменения выбора, поэтому вам также не нужно подключаться к другим сигналам.

...