def __init__(self, list_model=None, column_idx=()): if list_model is None: list_model = FileListModel() super(FileListView, self).__init__(list_model) # create the TreeViewColumns to display the data column_names = list_model.get_column_names() tvcolumn = [] cellpb = Gtk.CellRendererPixbuf() tvcolumn.append(Gtk.TreeViewColumn(column_names[0], cellpb, pixbuf=0)) cell = Gtk.CellRendererText() tvcolumn[0].pack_start(cell, False) tvcolumn[0].add_attribute(cell, 'text', column_names.index("Name") + 1) self.append_column(tvcolumn[0]) if not column_idx: column_idx = range(1, len(column_names)) for n in column_idx: cell = Gtk.CellRendererText() if n == 1: cell.set_property('xalign', 1.0) tvcolumn.append(Gtk.TreeViewColumn( column_names[n], cell, text=n+1 )) self.append_column(tvcolumn[-1])
class GenericTreeModelExample: def __init__(self): # Create a new window self.window = Gtk.Window(Gtk.WindowType.TOPLEVEL) self.window.set_size_request(300, 200) self.window.connect("destroy", Gtk.main_quit) self.listmodel = FileListModel() # create the TreeView self.treeview = Gtk.TreeView.new_with_model(self.listmodel) # create the TreeViewColumns to display the data column_names = self.listmodel.get_column_names() self.tvcolumn = [None] * len(column_names) cellpb = Gtk.CellRendererPixbuf() self.tvcolumn[0] = Gtk.TreeViewColumn(column_names[0], cellpb, pixbuf=0) cell = Gtk.CellRendererText() self.tvcolumn[0].pack_start(cell, False) self.tvcolumn[0].add_attribute(cell, 'text', 1) self.treeview.append_column(self.tvcolumn[0]) for n in range(1, len(column_names)): cell = Gtk.CellRendererText() if n == 1: cell.set_property('xalign', 1.0) self.tvcolumn[n] = Gtk.TreeViewColumn(column_names[n], cell, text=n+1) self.treeview.append_column(self.tvcolumn[n]) self.treeview.connect('row-activated', self.open_file) self.scrolledwindow = Gtk.ScrolledWindow() self.scrolledwindow.add(self.treeview) self.window.add(self.scrolledwindow) self.treeview.set_model(self.listmodel) self.window.set_title(self.listmodel.dirname) self.window.show_all() def open_file(self, treeview, tree_path, column): model = treeview.get_model() if model.is_folder(tree_path): pathname = model.get_pathname(tree_path) new_model = FileListModel(pathname) self.window.set_title(new_model.dirname) treeview.set_model(new_model)