I am trying to create a simple file browser. I am trying to add a tree hierarchy for files. I wrote a sample method that prints the hierarchy correctly, but I am having hard time to model the same concept to create Gtk.TreeStore
object. Following is my sample code to list the files:
def list_files(startpath):
for dirname, subdirs, files in os.walk(startpath):
level = dirname.replace(startpath, '').count(os.sep)
indent = ' ' * 4 * (level)
print('{}{}/'.format(indent, os.path.basename(dirname)))
subindent = ' ' * 4 * (level + 1)
for f in files:
print('{}{}'.format(subindent, f))
And following is the code to create a Gtk.TreeStore
:
def add_paned(self):
paned = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
TEST_DIR = '/home/myuser'
store = MyTreeStore(str)
store.generate_tree(TEST_DIR)
treeview = Gtk.TreeView(store)
renderer = Gtk.CellRendererText()
column = Gtk.TreeViewColumn("FileName", renderer, text=0)
treeview.append_column(column)
paned.add1(treeview)
self.add(paned)
return paned
MyTreeStore
class:
from gi.repository import Gtk
import os
class MyTreeStore(Gtk.TreeStore):
def __init__(self, *arg):
super(MyTreeStore, self).__init__(*arg)
def generate_tree(self, path):
parent = None;
for dirname, subdirs, files in sorted(os.walk(path)):
# level = dirname.replace(path, '').count(os.sep)
# iter = self.get_iter_from_string('{}'.format(level))
parent = self.append(parent, [os.path.basename(dirname)])
print(os.path.basename(dirname))
for file in sorted(files):
self.append(parent, [file])
I am just stuck on creating proper iterators when appending file names. Right now the above code just nest all directories since the parent is the last directory appended to the store. Any ideas how I would go about doing this?