Как отобразить иерархию каталогов в виджете GtkTreeView? - PullRequest
1 голос
/ 31 марта 2010

Я пытаюсь создать иерархический список каталогов в 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)

Вот что я получаю, когда запускаю приложение:
alt text

Я также считаю, что моя функция неэффективна и что я должен использовать os.walk(), поскольку он уже существует для этой цели.

Как я могу и как правильно / наиболее эффективно создать дерево каталогов с помощью pyGTK?

---edit ---- блок кода, который я использовал, работает, это:

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 Ответ

1 голос
/ 31 марта 2010

О производительности, это FAQ . О вашем алгоритме: когда вы достигаете subdirA piter указывает на subdirA, на следующей итерации, когда вы достигаете a.py piter, все еще указывает на subdirA.

Как вы сказали, используйте os.walk.

...