[pygtk] Updating a progressbar inside a recursive function

Adolfo González Blázquez listas at infinicode.org
Tue Sep 26 01:41:49 WST 2006


Hello,

I'm writing a little app to mass rename files. The gui has two parts, on
left a tree-like file browser for selecting the dir you want files to
rename. On right, theres a treeview that shows the files that are inside
the selected directory.

What i want to do is update a progressbar while populating the treeview
with the files.

The problem comes when the "add files recursively" option is enabled.
The app calls a recursive method to add everyfile inside that dir and
its subdirs. This function uses to take a while to end, so the gui
freezes till everyfile is read.

I've tried using the tips on
http://www.async.com.br/faq/pygtk/index.py?req=show&file=faq23.020.htp
but they don't work for me:
- The while gtk.events_pending(): gtk.main_iteration() stuff seems to
work, but when reading a dir, and changing to another, it should stop
reading the first dir, clean the treeview, and read the new. But it
reads the new, and still keeps adding files from the old dir.
- I did not suceed trying the generator stuff, 'cause i dont know how to
apply the example to a recursive function.

I've tried threads also, but totally unsuccesful (new to threads...)


So if anyone can point me anyway to solve this, or a good example, i
will really appreciate it.


The two functions related to this problem are pasted below:
The complete .py file can be found here:
http://www.infinicode.org/code/renamer.py

Thank you very much in advance!

-- adolfo

-----------------------------------------------------------------------
    def dir_selected(self, obj, dir):
        self.rename_button.set_sensitive(False)
        self.file_selected_model.clear()
        self.current_dir = dir
        
        self.populate_selected_files(dir)       
        
        self.selected_files.columns_autosize()
        self.statusbar.push(self.statusbar_context, dir)


    def populate_selected_files(self, dir): 
        pattern = self.file_pattern.get_text()
        
        # Add files from the current directory
        list = renamerfilefuncs.get_file_listing(dir, pattern)
        for elem in list:
            iter = self.file_selected_model.insert_before(None, None)
            self.file_selected_model.set_value(iter, 0, elem[0])
            self.file_selected_model.set_value(iter, 1, elem[1])
            self.progressbar.pulse()
            #while gtk.events_pending(): gtk.main_iteration()
        self.progressbar.set_fraction(0)
        
        # If the Recursive option is enabled, look into subdirectories
for files
        if self.add_recursive.get_active():
            dirlist = renamerfilefuncs.get_dir_listing(dir)
            for dir in dirlist:
                self.populate_selected_files(dir[1])
-----------------------------------------------------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 191 bytes
Desc: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada
	digitalmente
Url : http://www.daa.com.au/pipermail/pygtk/attachments/20060925/ae37d3e1/attachment.pgp


More information about the pygtk mailing list