2010-09-16 14 views
5

Quiero detectar cada vez que la selección de mi gtk.TreeView cambia y, cuando lo hace, llamar a una función con esta información. La única manera que he encontrado para hacerlo hasta ahora es unir a todas estas señales:Obtener una nueva selección en un GtkTreeView durante la señal

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

Sin embargo, parece que la selección que recibo de la devolución de llamada es "retardada". Es decir, muestra la selección después de que se completó la devolución de llamada anterior. Por ejemplo, si constantemente CTRL + clic en una fila, cuando la fila va de deseleccionada a seleccionada, foo no recibe ninguna selección, y cuando la fila va de seleccionada a no seleccionada, se le da una selección. Si llamo al get_selection().get_selected() un segundo después, sin embargo, obtengo la selección correcta. ¿Alguna idea de cómo lidiar con esto?

Respuesta

6

No estoy seguro de qué es toggle-cursor-row (la documentación está frustrantemente vacía), pero creo que esa es la señal incorrecta para manejar.

En su lugar, debe conectarse a la señal GtkTreeSelection changed. Debería ocuparse de todos los eventos de cambio de selección, por lo que tampoco es necesario conectarse a las otras señales.

+0

¡oh increíble! No me di cuenta de que el objeto de selección no cambiaría y que tenía señales propias. Creo que eso es lo que estoy buscando. – Claudiu

+0

funciona de maravilla, de nuevo – Claudiu

+0

¿Hay alguna forma de conectar esta señal desde Glade? – umpirsky

Cuestiones relacionadas