[pygtk] get_selection

Aaron Optimizer Digulla digulla@hepe.com
Tue, 08 Aug 2000 12:28:07 +0200 (CEST)


Quoting Martin Franklin <martin.franklin@waii.com>:

> I had this problem the other day and came up with BTW i'm using a
> Clist...
> 
> .......cut.......
>         self.selected=[]
> 
>         self.clist = GtkCList(3,['One','Two', 'Three'] )
>         self.clist.connect("select_row", self.select_list)
>         self.clist.connect("unselect_row", self.deselect_list)
>         self.clist.connect("click-column", self.col_click)
> 
> ........cut......
> 
> 
>     def get_selected(self, *stuff):
>         return self.selected
>                 
>     def select_list(self, *stuff):
>         id = self.clist.get_text(stuff[1], 0)
>         cd = self.clist.get_text(stuff[1], 1)
>         dc = self.clist.get_text(stuff[1], 2)
>         self.selected.append( (id, cd, dc) )    
>     
>     def deselect_list(self, *stuff):
>         id = self.clist.get_text(stuff[1], 0)
>         cd = self.clist.get_text(stuff[1], 1)
>         dc = self.clist.get_text(stuff[1], 2)
>         self.selected.remove( (id, cd, dc) )    

Just try clist.selection, that contains a list with the row numbers of
the currently selected items.

Something else: When you add callbacks for (un)select_row, then
select_all/unselect_all can become very slow if your list has
several thousand rows (because you're signaled for every row).
The solution is to create an idle callback:

   def select_row (self, *args):
      if self.idle == -1:
         self.idle = idle_add (self.selection_changed)

   def selection_changed (self, *args):
       self.idle = -1
       ...

-- 
==============================================
Sowatec AG,       CH-8330 Pfäffikon (ZH)
Witzbergstr. 7,   http://www.sowatec.com
Tel: +41-(0)1-952 55 55
Fax: +41-(0)1-952 55 66
----------------------------------------------
Aaron "Optimizer" Digulla, digulla@sowatec.com
==============================================