>>>>> "David" == David M Cook <[EMAIL PROTECTED]> writes:

    David> Well for CRToggle you have "toggled" and for CRText you
    David> have "edited", and that's it AFAIK.  See the C API docs for
    David> the the signatures of the callbacks.

Thanks for the info.

Unfortunately, I can't see how with either of these I can create a
multiselect text list, with the ability to select and deselect text by
clicking on it.  In the example below, I can select text, but cannot
deselect it, because if I click on already selected text, it is not
"changed" and hence my handler is not called.  "edited" doesn't work
for me because I don't want to edit the text.  "toggled" doesn't work
because I don't want users to have to check every single item -- the
list will be long with natural ranges so I want them to be able to
select a range with click item_1, shift click item_n.

Below I use treeview.get_selection().connect("changed", changed),
which has the deselection problem.  Can I connect the
gtk.TreeSelection to something besides 'changed' that will be called
whenever a row is clicked.  I adventurously tried 'clicked' and
'activated', but both are unknown signal names.

Where is the magic pixie dust that I am missing?

import gobject
import gtk

COLUMN_BOOL=0
COLUMN_TEXT=1

data = ['John', 'Miriam', 'Rahel', 'Ava', 'Baerbel']
def create_model():
    store = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING)
    for item in data:
        iter = store.append()
        
        store.set(iter,
                  COLUMN_BOOL, gtk.FALSE,
                  COLUMN_TEXT, item)
    return store

def changed(w, *args):
    #print w.get_selected(), w, type(w)
    model, iter =  w.get_selected()
    on = model.get_value(iter, COLUMN_BOOL)
    on = not on
    model.set(iter, COLUMN_BOOL, on)
    print model.get_value(iter, COLUMN_TEXT), \
          model.get_value(iter, COLUMN_BOOL)

win = gtk.Window()

win.connect('destroy', lambda win: gtk.main_quit())
win.set_title('GtkListStore de2mo')
win.set_border_width(8)
vbox = gtk.VBox(gtk.FALSE, 8)
win.add(vbox)
    
label = gtk.Label('This is the list')
vbox.pack_start(label, gtk.FALSE, gtk.FALSE)
    
sw = gtk.ScrolledWindow()
sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
sw.set_policy(gtk.POLICY_NEVER,
              gtk.POLICY_AUTOMATIC)
vbox.pack_start(sw)
    
model = create_model()
treeview = gtk.TreeView(model)
treeview.set_rules_hint(gtk.TRUE)    
sw.add(treeview)


model = treeview.get_model()

renderer = gtk.CellRendererToggle()
column = gtk.TreeViewColumn('ON', renderer, active=COLUMN_BOOL)
column.set_visible(gtk.FALSE)

renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn('Name', renderer,
                            text=COLUMN_TEXT)
treeview.append_column(column)
treeview.get_selection().connect("changed", changed)
#renderer.connect("edited", changed)

win.set_default_size(280, 250)
    
win.show_all()
gtk.main()
            
_______________________________________________
pygtk mailing list   [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to