On Sun, Jul 27, 2003 at 03:05:47AM -0700, Colin Fox wrote: > Is there any documentation or examples that show how to use the new > GtkTree code in python? Especially with a libglade generated interface? > > A working tree example would be ideal.
There's a tutorial here: http://liw.iki.fi/liw/texts/gtktreeview-tutorial.html Don't forget the examples that come with the pygtk distribution. I whipped up my own example of a multi-column treeview. It demonstrates a few things: * How make certain cells editable. Here I use two "control" columns at the end of my row (store column 2 & 3) that control whether a cell is editable and visible. How the renderer uses these columns is set with column = gtk.TreeViewColumn(column_titles[i], cell, text=i, editable=ncols+i, visible=ncols+i) which means that the renderer will get the text to render from column i and determine whether the cell is editable and visible using the values in column ncols+i. See the properties for the different renderers to see what other keywords you can use. * A callback for the "edited" signal which actually sets the new text that you type in a cell. I use set_data/get_data to retrieve the actual store column that the renderer corresponds to (you could also pass it as user_data when connecting the callback). * How to get a selection, this is in the on_delete_button_clicked callback. Dave Cook
try: import pygtk; pygtk.require('2.0') except: # Hope for the best... pass import gobject import gtk from gtk import mainquit import gtk.glade GLADEFILE = 'simple_treestore.glade' COLUMN_TITLES = ('Composer', 'Title') COLUMN_TYPES = [gobject.TYPE_STRING]*2 + [gobject.TYPE_BOOLEAN]*2 treedata = [[0, 'Mahler, Gustav', 1, '', 2, 1, 3, 0], [0, '', 1, 'Symphony No 1', 2, 0, 3, 1], [0, '', 1, 'Symphony No 9', 2, 0, 3, 1], [0, 'Prokofiev, Sergei', 1, '', 2, 1, 3, 0], [0, '', 1, 'Alexander Nevsky', 2, 0, 3, 1], [0, '', 1, 'Piano Concerto No 3', 2, 0, 3, 1], [0, 'Bartok, Bela', 1, '', 2, 1, 3, 0], [0, '', 1, 'Concerto for Orchestra', 2, 0, 3, 1], [0, '', 1, 'String Quartet No 5', 2, 0, 3, 1]] def on_delete_button_clicked(treeview): selection = treeview.get_selection() select_tuple = selection.get_selected() if select_tuple: store, iter = select_tuple store.remove(iter) def edited_callback(renderer, path_string, newtext, treeview): colno = renderer.get_data('colno') if colno!=None: indices = path_string.split(':') path = tuple( map(int, indices) ) store = treeview.get_model() iter = store.get_iter(path) store.set_value(iter, colno, newtext) def add_columns(treeview, column_titles): ncols = len(column_titles) for i in range(ncols): cell = gtk.CellRendererText() column = gtk.TreeViewColumn(column_titles[i], cell, text=i, editable=ncols+i, visible=ncols+i) cell.set_data('colno', i) cell.connect("edited", edited_callback, treeview) treeview.append_column(column) def init_store(store, rows): for row in rows: if row[-1]==0: iter = store.append(None) parent = iter else: iter = store.append(parent) store.set(iter, *row) def main(): xml = gtk.glade.XML(GLADEFILE) treeview = xml.get_widget('treeview') add_columns(treeview, COLUMN_TITLES) xml.signal_autoconnect(globals()) store = gtk.TreeStore(*COLUMN_TYPES) init_store(store, treedata) treeview.set_model(store) gtk.main() if __name__=='__main__': main()
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="window1"> <property name="visible">True</property> <property name="title" translatable="yes">window1</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> <property name="modal">False</property> <property name="default_width">240</property> <property name="default_height">240</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> <signal name="delete_event" handler="mainquit" last_modification_time="Sun, 27 Jul 2003 12:15:57 GMT"/> <child> <widget class="GtkVBox" id="vbox1"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkScrolledWindow" id="scrolledwindow1"> <property name="border_width">3</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> <property name="window_placement">GTK_CORNER_TOP_LEFT</property> <child> <widget class="GtkTreeView" id="treeview"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="headers_visible">True</property> <property name="rules_hint">False</property> <property name="reorderable">False</property> <property name="enable_search">True</property> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkButton" id="delete_button"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">Delete Row</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <signal name="clicked" handler="on_delete_button_clicked" object="treeview" last_modification_time="Sun, 27 Jul 2003 11:55:13 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> </widget> </child> </widget> </glade-interface>
_______________________________________________ pygtk mailing list [EMAIL PROTECTED] http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/