2010-09-16 8 views
5

Voglio rilevare ogni volta che la selezione del mio gtk.TreeView cambia e, quando lo fa, chiamare una funzione w/questa informazione. L'unico modo che ho trovato per farlo finora è quello di allegare a tutti questi segnali:Ottenere una nuova selezione in un GtkTreeView durante il segnale

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

Tuttavia, sembra che la scelta che ricevo dalla richiamata è "in ritardo". Cioè, mostra la selezione dopo che la richiamata precedente era stata completata. Ad esempio, se continuo CTRL + clic su una riga, quando la riga passa da deselezionata a selezionata, a foo non viene assegnata alcuna selezione e quando la riga passa da selezionata a deselezionata, viene assegnata una selezione. Se chiamo get_selection().get_selected() un secondo dopo, però, ottengo la selezione giusta. Qualche idea su come affrontare questo?

risposta

6

Non sono sicuro di ciò che fa toggle-cursor-row (la documentazione è frustrantemente vuota), ma penso che sia il segnale sbagliato da gestire.

Invece, è necessario connettersi al segnale GtkTreeSelection changed. Dovrebbe occuparsi di tutti gli eventi di cambio di selezione, quindi non è necessario collegarsi agli altri segnali.

+0

oh fantastico! non mi rendevo conto che l'oggetto di selezione non sarebbe cambiato e che aveva segnali propri. penso che sia quello che sto cercando. – Claudiu

+0

funziona alla grande, ty di nuovo – Claudiu

+0

C'è un modo per collegare questo segnale da Glade? – umpirsky

Problemi correlati