[pygtk] Ctree and Checkboxes

Jon Nelson jnelson@securepipe.com
Tue, 29 Oct 2002 16:54:50 -0600

On Tue, 29 Oct 2002 16:31:34 -0600 (CST)
Tanya Brethour <brethour@ncsa.uiuc.edu> wrote:

> Ok. I am a newbie to gtk and python.. please do not let that scare you
> aware :)
> Essentially I have a ctree currently with many nodes in it. I want to be
> able to "check" certain nodes. So I would have the label and a small
> checkbox next to it. So the user can check certain items they want and
> leave the ones they don't unchecked. Make sense? 
> So.. I saw some messages on this list dating back to Nov. 2001 in
> regards to Ctree and Checkboxes and it did not look promising. From the
> pygtk tutorial.. I did not really find an answer. As far as I can tell
> ctree only lets you specify a open and closed image.

Well, if you are creative enough, you can just fake it using pixmaps.

(When I use 'tree' I refer to the specific ctree you are dealing with)

Let's say you have a dictionary of settings, like this:

    self.pixmaps = {}
    self.pixmaps['On'] = gtk.create_pixmap_from_xpm(tree, None, 'On.xpm')
    self.pixmaps['Off'] = gtk.create_pixmap_from_xpm(tree, None, 'Off.xpm')

you build the tree with:

        columns = [some text here]

(for nodes):      
        node = tree.insert_node(parent,None,columns,5,None,None,None,None,gtk.TRUE,gtk.FALSE)

(for branches):
        node = tree.insert_node(parent,None,columns,5,None,None,None,None,gtk.FALSE,gtk.FALSE)

and on each of them you call (setting is either 'On' or 'Off'):
(this is a function):

    (xpm,xpm_mask) = self.pixmaps[setting]
    col = 1
    (bleh,bleh,bleh,bleh,bleh,bleh,is_leaf,expanded) = tree.get_node_info(node)
    tree.set_node_info(node, setting, 5, xpm, xpm_mask, xpm, xpm_mask, is_leaf, expanded)


Now, when you want to "update" the pixmap as a result of some
user or programmatic action, you just do the same thing again (above)
with the appropriate setting.


Pound for pound, the amoeba is the most vicious animal on earth.

Jon Nelson <jnelson@securepipe.com>
C and Python Code Gardener