Colin Fox <[EMAIL PROTECTED]> writes:

> On Sun, 2003-08-10 at 11:30, Doug Quale wrote:
> Thanks! That's perfect. Just out of curiosity, how would I show
> different images for when the item is expanded and collapsed?

You need to connect signal handlers to the 'row-expanded' and
'row-collapsed' signals that will set the icon column in the treemodel
row appropriately.  It could look something like this:

#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk
import gobject

class silly_list(gtk.TreeView):
    def __init__(self):
        gtk.TreeView.__init__(self)
        self.init_model()
        self.init_view_columns()
        self.connect('row-expanded', self.on_row_expanded)
        self.connect('row-collapsed', self.on_row_collapsed)

    def init_model(self):
        store = gtk.TreeStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING)
        # Fill the model with some silly sample data.
        for p in xrange(10):
            parent = store.append(None, (self.get_icon_pixbuf(gtk.STOCK_ADD),
                                         'Parent %s' % p))
            for c in xrange(5):
                store.append(parent, (None, 'Child %s' % c))
        self.set_model(store)

    def get_icon_pixbuf(self, stock):
        return self.render_icon(stock,
                                size=gtk.ICON_SIZE_MENU,
                                detail=None)

    def init_view_columns(self):
        col = gtk.TreeViewColumn()
        col.set_title('Silly Example')
        render_pixbuf = gtk.CellRendererPixbuf()
        col.pack_start(render_pixbuf, expand=False)
        col.add_attribute(render_pixbuf, 'pixbuf', 0)
        render_text = gtk.CellRendererText()
        col.pack_start(render_text, expand=True)
        col.add_attribute(render_text, 'text', 1)
        self.append_column(col)

    def set_row_icon(self, treeiter, stock):
        store = self.get_model()
        store.set(treeiter, 0, self.get_icon_pixbuf(stock))

    def on_row_expanded(self, treeiter, path):
        self.set_row_icon(treeiter, gtk.STOCK_REMOVE)
    on_row_expanded = staticmethod(on_row_expanded)

    def on_row_collapsed(self, treeiter, path):
        self.set_row_icon(treeiter, gtk.STOCK_ADD)
    on_row_collapsed = staticmethod(on_row_collapsed)


if __name__ == '__main__':
    w = gtk.Window()
    w.set_title('Silly Example')
    w.set_size_request(width=400, height=300)
    w.connect('destroy', gtk.mainquit)
    sw = gtk.ScrolledWindow()
    sw.add(silly_list())
    w.add(sw)
    w.show_all()
    gtk.mainloop()
_______________________________________________
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