It is not possible to create a recursive function over a pyGTK treeStore

sebastien.abeille at gmail.com sebastien.abeille at gmail.com
Fri Jun 29 08:53:56 EDT 2007


A little update : I finally found an example of a file browser using
gtkTreestore that parse the file system recursively :
http://www.koders.com/python/fidDB37D29C69F526E5EEA9A7D8B4FC5B87E92A78CC.aspx?s=filter_out_extensions#L113

I still need to check how it works, but I am sure that it will answer
my question.
Thank you


On 29 juin, 13:30, sebastien.abei... at gmail.com wrote:
> Hello,
>
> I would like to create a minimalist file browser using pyGTK.
>
> Having read lot of tutorials, it seems to me that that in my case, the
> best solution is
> to have a gtk.TreeStore containing all the files and folders so that
> it would map the
> file system hierarchy.
>
> I wrote a recursive function that would go through the file system
> tree.
>
> My problem is that a sub-node of a gtk.TreeStore is not a
> gtk.TreeStore, but
> a gtk.TreeIter. And gtk.treeter has almost no functions I would be
> able to use (like "append")
> Therefore I can not explore the whole file system.
>
> Do you have another way so that I would be able to put all the file
> system hierarchy
> into a gtk.TreeStore?
> I was quite happy with my recursive solution ...
>
> ===================================
> code :
> #!/usr/bin/env python
> import pygtk
> pygtk.require('2.0')
> import gtk, gobject, os
>
> prefdir="/tmp/a"
>
> class InfoModele:
>
>         def matchPathTreetoModelTree(self, path, treeStoreNode):
>                 files = [f for f in os.listdir(path) if f[0] <> '.']
>                 for i in range(len(files)):
>                         if os.path.isfile(path+'/'+files[i]):
>                                 print path+'/'+files[i]+" is a file"
>                                 treeStoreNode.append( None, (path+'/'+files[i], None) )
>                         if os.path.isdir(path+'/'+files[i]): #is a directory, go
> recursively
>                                 print path+'/'+files[i]+" is a directory"
>                                 mother = self.tree_store.append( None, (path+'/'+files[i], None) )
>                                 self.matchPathTreetoModelTree(path+'/'+files[i], mother)
>
>         def __init__(self):
>                 self.tree_store = gtk.TreeStore( gobject.TYPE_STRING,
> gobject.TYPE_STRING)
>                 path=prefdir
>                 self.matchPathTreetoModelTree(prefdir, self.tree_store)
>
> if __name__ == "__main__":
>         i=InfoModele()
>
> =================================
> file system :
> a
> |-ab/
>    |-abc/
>    |-abcd
>
> ================================
> Program output :
> /tmp/a/ab is a directory
> /tmp/a/ab/abc is a file
> Traceback (most recent call last):
>   File "question.py", line 28, in <module>
>     i=InfoModele()
>   File "question.py", line 25, in __init__
>     self.matchPathTreetoModelTree(prefdir, self.tree_store)
>   File "question.py", line 20, in matchPathTreetoModelTree
>     self.matchPathTreetoModelTree(path+'/'+files[i], mother)
>   File "question.py", line 16, in matchPathTreetoModelTree
>     treeStoreNode.append( None, (path+'/'+files[i], None) )
> AttributeError: 'gtk.TreeIter' object has no attribute 'append'





More information about the Python-list mailing list