#!/usr/bin/env python import gtk class TestModel1 (gtk.ListStore): ( COLUMN_FOO, COLUMN_WHICH_BAR ) = range (2) def __init__ (self): gtk.ListStore.__init__ (self, str, str) for n in (1, 2, 3, 4, 5, 6): self.set (self.append (), self.COLUMN_FOO, "foo" + str (n), self.COLUMN_WHICH_BAR, "bar" + str (((n + 3) % 6) + 1)) class TestModel2 (gtk.ListStore): ( COLUMN_BAR, ) = range (1) def __init__ (self): gtk.ListStore.__init__ (self, str) for bar in ("bar1", "bar2", "bar3", "bar4", "bar5", "bar6"): self.set (self.prepend (), self.COLUMN_BAR, bar) if __name__ == "__main__": window = gtk.Window (gtk.WINDOW_TOPLEVEL) window.connect ("destroy", gtk.main_quit) window.show () model1 = TestModel1 () model2 = TestModel2 () treeview = gtk.TreeView (model1) treeview.show () window.add (treeview) treeview.get_selection ().set_mode (gtk.SELECTION_SINGLE) treeview.set_headers_visible (False) c = gtk.TreeViewColumn ("Foo", gtk.CellRendererText (), text = TestModel1.COLUMN_FOO) treeview.append_column (c) cell = gtk.CellRendererCombo () cell.set_property ("model", model2) cell.set_property ("text-column", TestModel2.COLUMN_BAR) cell.set_property ("editable", True) cell.set_property ("has-entry", False) def combo_edited (cell, path, new_text, model1): iter = model1.get_iter_from_string (path) if model1[iter][TestModel1.COLUMN_WHICH_BAR] != new_text: model1.set (iter, TestModel1.COLUMN_WHICH_BAR, new_text) cell.connect ("edited", combo_edited, model1) c = gtk.TreeViewColumn ("Bar", cell, text = TestModel1.COLUMN_WHICH_BAR) treeview.append_column (c) gtk.main ()