On 10/12/2009 12:45 PM, Daniel B. Thurman wrote: [snip!] Here is updated code. The problem I have is preventing the expand/collapse arrow button from changing the Cell Rendering from shifting over the Icon/directory.
Try the code below, double-click the directories to expand, then notice that the entire Directory column is aligned together which is not what I want. Suggestions please? ============ New Code ============== [code] #!/usr/bin/env python import os, stat, time import pygtk pygtk.require('2.0') import gtk DEBUG=True class FileLister: # column_names = ['Name', 'Size', 'Mode', 'Last Changed', 'Path'] column_names = ['Files'] # Close the window and quit def delete_event(self, widget, event, data=None): gtk.main_quit() return False def __init__(self, path=None): cell_data_funcs = ( None, self.file_size, self.file_mode, self.file_last_changed, self.file_path) # Create a new window self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_title("FileLister") self.window.set_size_request(600, 400) self.window.connect("delete_event", self.delete_event) # Create TreeStore File List self.treestore = gtk.TreeStore(str, gtk.gdk.Pixbuf, int, bool, str) # Obtain the list of files self.path = os.path.expanduser('~/Desktop/') self.dir_walk(self.path) # Create the TreeView and set our data store as the model self.treeview = gtk.TreeView(self.treestore) # self.treeview.set_search_column(0) # self.treeview.set_reorderable(True) # create the TreeViewColumns to display the data self.tvcolumn = [None] * len(self.column_names) cellpb = gtk.CellRendererPixbuf() self.tvcolumn[0] = gtk.TreeViewColumn(self.column_names[0], cellpb) self.tvcolumn[0].set_cell_data_func(cellpb, self.file_pixbuf) cell = gtk.CellRendererText() self.tvcolumn[0].pack_start(cell, False) self.tvcolumn[0].set_cell_data_func(cell, self.file_name) self.treeview.append_column(self.tvcolumn[0]) # Append more columns if available for n in range(1, len(self.column_names)): cell = gtk.CellRendererText() self.tvcolumn[n] = gtk.TreeViewColumn(self.column_names[n], cell) if n == 1: cell.set_property('xalign', 0.0) self.tvcolumn[n].set_cell_data_func(cell, cell_data_funcs[n]) self.treeview.append_column(self.tvcolumn[n]) # Folder open action self.treeview.connect('row-activated', self.on_row_activated) # Add scrolled Window self.scrolledwindow = gtk.ScrolledWindow() self.scrolledwindow.add(self.treeview) # Add scrolled window and show self.window.add(self.scrolledwindow) self.window.show_all() # Obtain the directory listing def dir_walk(self, path, parent=None, recurse=False): filestat = os.stat(path) if not stat.S_ISDIR(filestat.st_mode): self.debug("File : "+path) return self.treestore for f in os.listdir(path): filename = os.path.join(path, f) self.debug("Directory: "+filename) fdata = os.stat(filename) is_folder = stat.S_ISDIR(fdata.st_mode) img = gtk.icon_theme_get_default().load_icon( "folder" if is_folder else "document", gtk.ICON_SIZE_MENU, 0) ts = self.treestore.append(parent, [f,img,fdata.st_size, is_folder, path]) if is_folder & recurse: self.dir_walk(filename, ts) return self.treestore def on_row_activated(self, treeview, path, column): model = treeview.get_model() iter = model.get_iter(path) filename = os.path.join(model.get_value(iter, 4), model.get_value(iter, 0)) #self.debug("File : "+filename) ts = self.dir_walk(filename, parent=iter) treeview.set_model(ts) return def file_pixbuf(self, column, cell, model, iter): filename = os.path.join(model.get_value(iter, 4), model.get_value(iter, 0)) filestat = os.stat(filename) if stat.S_ISDIR(filestat.st_mode): pb = gtk.icon_theme_get_default().load_icon("folder", gtk.ICON_SIZE_MENU, 0) else: pb = gtk.icon_theme_get_default().load_icon("document", gtk.ICON_SIZE_MENU, 0) cell.set_property('pixbuf', pb) return def file_name(self, column, cell, model, iter): cell.set_property('text', model.get_value(iter, 0)) return def file_size(self, column, cell, model, iter): filename = os.path.join(model.get_value(iter, 4), model.get_value(iter, 0)) filestat = os.stat(filename) cell.set_property('text', filestat.st_size) return def file_mode(self, column, cell, model, iter): filename = os.path.join(model.get_value(iter, 4), model.get_value(iter, 0)) filestat = os.stat(filename) cell.set_property('text', oct(stat.S_IMODE(filestat.st_mode))) return def file_last_changed(self, column, cell, model, iter): filename = os.path.join(model.get_value(iter, 4), model.get_value(iter, 0)) filestat = os.stat(filename) cell.set_property('text', time.ctime(filestat.st_mtime)) return def file_path(self, column, cell, model, iter): filename = os.path.join(model.get_value(iter, 4), model.get_value(iter, 0)) cell.set_property('text', filename) return def debug(self, string): if DEBUG: print 'DEBUG: %s' % string def main(): gtk.main() if __name__ == "__main__": myApp = FileLister() main() [/code] _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list