Как отобразить иерархию каталогов в виджете GtkTreeView?
Я пытаюсь создать иерархический список каталогов в PyGTK.
В настоящее время у меня есть следующее дерево каталогов:
/root
folderA
- subdirA
- subA.py
- a.py
folderB
- b.py
Я написал функцию, которая, кажется, почти работает:
def go(root, piter=None):
for filename in os.listdir(root):
isdir = os.path.isdir(os.path.join(root, filename))
piter = self.treestore.append(piter, [filename])
if isdir == True:
go(os.path.join(root, filename), piter)
Вот что я получаю, когда запускаю приложение:
Я также думаю, что моя функция неэффективна и что я должен использовать os.walk(), так как она уже существует для этой цели.
Как я могу, и как правильно / наиболее эффективный способ создания дерева каталогов с PyGTK?
--- редактировать ---- блок кода, который я использовал, это работает:
parents = {}
for dir, dirs, files in os.walk(root):
for subdir in dirs:
parents[os.path.join(dir, subdir)] = self.treestore.append(parents.get(dir, None), [subdir])
for item in files:
self.treestore.append(parents.get(dir, None), [item])
1 ответ
Решение
По поводу производительности, это FAQ. О вашем алгоритме: когда вы достигнете subdirA
piter
указывает на subdirA
на следующей итерации, когда вы достигнете a.py
piter
еще указывает на subdirA
,
Как вы сказали, используйте os.walk
,