I usually take the same approach as Alvaro. I pre-process things to the get
the total number of iterations and then I start the actual process with a
progress bar for the whole thing.

Another way is to leave the progress as merely an indication that something
is happening, going from 0 to 100 for each new iteration. This might be
"better" for processes that you don't know the actual "length" and take way
too long to process like doing a os.walk() on a huge folder structure.

For that I do a try os.walk().next() and set the progress bar from 0 to 100
for each new iteration that is successful until it ends and I set the
progress bar to complete.

But would be great if there was an alternative to these.


cheers,
diogo

On Tue, Sep 18, 2012 at 4:54 PM, Howard Jones <mrhowardjo...@yahoo.com>wrote:

> Yes but that means walking twice which was something I was hoping to avoid
>
>
> Howard
>
>   ------------------------------
> *From:* Alvaro Castaneda <varo...@gmail.com>
> *To:* Howard Jones <mrhowardjo...@yahoo.com>; Nuke Python discussion <
> nuke-python@support.thefoundry.co.uk>
> *Sent:* Tuesday, 18 September 2012, 20:36
>
> *Subject:* Re: [Nuke-python] progress bar
>
>
> you can count the folders before hand using something like os.walk()
>
> http://www.saltycrane.com/blog/2007/03/python-oswalk-example/
>
>
> cheers!!
>     .:varomix:.
> MIX Studio
> 3D Artist/Generalist TD
> varo...@varomix.net <varo...@gmail.com>
>  Contact Me [image: Linkedin] <http://mx.linkedin.com/in/varomix>[image:
> Facebook] <http://www.facebook.com/varomix>[image: 
> Twitter]<http://www.twitter.com/varomix>
>
>
>
>
> On Tue, Sep 18, 2012 at 1:14 PM, Howard Jones <mrhowardjo...@yahoo.com>wrote:
>
> Hooray - a clear explanation!
>
> Out of interest what do you do if you don't know how many iterations are
> needed so in
>
> progIncr = 100.0 / len(reads)
>
> you cant know the value of len(reads)?
>
> Say you are walking a path and dont know how many subfolders there are but
> want to show progress on the walk?
>
> Cheers
> Howard
>
>   ------------------------------
> *From:* Luca Fiorentini <luca.fiorent...@gmail.com>
> *To:* Nuke Python discussion <nuke-python@support.thefoundry.co.uk>
> *Sent:* Tuesday, 18 September 2012, 18:56
> *Subject:* Re: [Nuke-python] progress bar
>
> Thanks Nathan!
>
> Now it is way clearer and works like a charm!
>
> Kudos :)
>
> On Tue, Sep 18, 2012 at 7:34 PM, Nathan Rusch <nathan_ru...@hotmail.com>wrote:
>
>   You’re basically on the right track. You need to run your slow function
> on a separate thread to avoid blocking Nuke’s GUI until it finishes, and
> you would create and update your progress bar from within that function as
> well so it will update properly in time with your processing.
>
>
> import threading
> import time
>
> def dummy():
>     task = nuke.ProgressTask('Examining Read Nodes...')
>     reads = nuke.allNodes('Read')
>     progIncr = 100.0 / len(reads)
>     for i, r in enumerate(reads):
>         if task.isCancelled():
>             nuke.executeInMainThread(nuke.message, args=('Aborted',))
>             return
>         task.setProgress(int(i * progIncr))
>         task.setMessage(r.fullName())
>         # Placeholder for some long per-node process
>         time.sleep(2)
>
> def aMenuCommand():
>     # This is the function you would actually bind to a Nuke menu command
>     threading.Thread(target=dummy).start()
>
>
> -Nathan
>
>
>  *From:* Luca Fiorentini <luca.fiorent...@gmail.com>
> *Sent:* Tuesday, September 18, 2012 10:19 AM
> *To:* nuke-python@support.thefoundry.co.uk
> *Subject:* [Nuke-python] progress bar
>
> Hi!
>
> I am trying to make a progress bar but with no success.
> I took a look at the code in the guide
>
>
> http://docs.thefoundry.co.uk/nuke/63/pythondevguide/basics.html#creating-progress-bar-dialogs
>
> But I am clearly missing something.
> Could someone kindly explain it to me in an easier way?
> Imagine I have a function like this:
>
> def dummy():
>     for n in nuke.allNodes('Read'):
>         print 'here my super slow function'
>
> where and how should I implement the progress bar?
> should I use the code from the example and then call the whole funciont in
> a new thread? like
>
> threading.Thread( None, dummy ).start()
>
> Thanks for your time
>
> --
> *Luca Fiorentini - 3D Lighting Artist*
> My Showreel <http://www.vimeo.com/lucafiorentini/reel> - My 
> blog<http://lucafiorentini.wordpress.com/>- My
> Flickr <http://www.flickr.com/photos/lucafiorentini>
>
>  ------------------------------
> _______________________________________________
> Nuke-python mailing list
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>
> _______________________________________________
> Nuke-python mailing list
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>
>
>
>
> --
> *Luca Fiorentini - 3D Lighting Artist*
> My Showreel <http://www.vimeo.com/lucafiorentini/reel> - My 
> blog<http://lucafiorentini.wordpress.com/>- My
> Flickr <http://www.flickr.com/photos/lucafiorentini>
>
>
> _______________________________________________
> Nuke-python mailing list
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>
>
>
> _______________________________________________
> Nuke-python mailing list
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>
>
>
>
>
> _______________________________________________
> Nuke-python mailing list
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>
>
_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to