⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filelisting-gtm.py

📁 pygtk的教程
💻 PY
字号:
#!/usr/bin/env pythonimport os, stat, timeimport pygtkpygtk.require('2.0')import gtkfolderxpm = [    "17 16 7 1",    "  c #000000",    ". c #808000",    "X c yellow",    "o c #808080",    "O c #c0c0c0",    "+ c white",    "@ c None",    "@@@@@@@@@@@@@@@@@",    "@@@@@@@@@@@@@@@@@",    "@@+XXXX.@@@@@@@@@",    "@+OOOOOO.@@@@@@@@",    "@+OXOXOXOXOXOXO. ",    "@+XOXOXOXOXOXOX. ",    "@+OXOXOXOXOXOXO. ",    "@+XOXOXOXOXOXOX. ",    "@+OXOXOXOXOXOXO. ",    "@+XOXOXOXOXOXOX. ",    "@+OXOXOXOXOXOXO. ",    "@+XOXOXOXOXOXOX. ",    "@+OOOOOOOOOOOOO. ",    "@                ",    "@@@@@@@@@@@@@@@@@",    "@@@@@@@@@@@@@@@@@"    ]folderpb = gtk.gdk.pixbuf_new_from_xpm_data(folderxpm)filexpm = [    "12 12 3 1",    "  c #000000",    ". c #ffff04",    "X c #b2c0dc",    "X        XXX",    "X ...... XXX",    "X ......   X",    "X .    ... X",    "X ........ X",    "X .   .... X",    "X ........ X",    "X .     .. X",    "X ........ X",    "X .     .. X",    "X ........ X",    "X          X"    ]filepb = gtk.gdk.pixbuf_new_from_xpm_data(filexpm)class FileListModel(gtk.GenericTreeModel):    column_types = (gtk.gdk.Pixbuf, str, long, str, str)    column_names = ['Name', 'Size', 'Mode', 'Last Changed']    def __init__(self, dname=None):        gtk.GenericTreeModel.__init__(self)        if not dname:            self.dirname = os.path.expanduser('~')        else:            self.dirname = os.path.abspath(dname)        self.files = [f for f in os.listdir(self.dirname) if f[0] <> '.']        self.files.sort()        self.files = ['..'] + self.files        return    def get_pathname(self, path):        filename = self.files[path[0]]        return os.path.join(self.dirname, filename)    def is_folder(self, path):        filename = self.files[path[0]]        pathname = os.path.join(self.dirname, filename)        filestat = os.stat(pathname)        if stat.S_ISDIR(filestat.st_mode):            return True        return False    def get_column_names(self):        return self.column_names[:]    def on_get_flags(self):        return gtk.TREE_MODEL_LIST_ONLY|gtk.TREE_MODEL_ITERS_PERSIST    def on_get_n_columns(self):        return len(self.column_types)    def on_get_column_type(self, n):        return self.column_types[n]    def on_get_iter(self, path):        return self.files[path[0]]    def on_get_path(self, rowref):        return self.files.index(rowref)    def on_get_value(self, rowref, column):        fname = os.path.join(self.dirname, rowref)        try:            filestat = os.stat(fname)        except OSError:            return None        mode = filestat.st_mode        if column is 0:            if stat.S_ISDIR(mode):                return folderpb            else:                return filepb        elif column is 1:            return rowref        elif column is 2:            return filestat.st_size        elif column is 3:            return oct(stat.S_IMODE(mode))        return time.ctime(filestat.st_mtime)    def on_iter_next(self, rowref):        try:            i = self.files.index(rowref)+1            return self.files[i]        except IndexError:            return None    def on_iter_children(self, rowref):        if rowref:            return None        return self.files[0]    def on_iter_has_child(self, rowref):        return False    def on_iter_n_children(self, rowref):        if rowref:            return 0        return len(self.files)    def on_iter_nth_child(self, rowref, n):        if rowref:            return None        try:            return self.files[n]        except IndexError:            return None    def on_iter_parent(child):        return Noneclass GenericTreeModelExample:    def delete_event(self, widget, event, data=None):        gtk.main_quit()        return False     def __init__(self):        # Create a new window        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)         self.window.set_size_request(300, 200)         self.window.connect("delete_event", self.delete_event)         self.listmodel = FileListModel()         # create the TreeView        self.treeview = gtk.TreeView()         # 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, path, column):        model = treeview.get_model()        if model.is_folder(path):            pathname = model.get_pathname(path)            new_model = FileListModel(pathname)            self.window.set_title(new_model.dirname)            treeview.set_model(new_model)        return def main():    gtk.main()if __name__ == "__main__":    gtmexample = GenericTreeModelExample()    main()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -