>>>>> "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/