[Tutor] cannot get a label message to display immediately
Bill Allen
wallenpb at gmail.com
Sat Aug 15 07:44:58 CEST 2015
On Fri, Aug 14, 2015 at 3:06 PM, Alan Gauld <alan.gauld at btinternet.com>
wrote:
>
> That's the problem right there. You should never kick of an event handler
> that takes a long time to run. Either:
> 1) Kick of a separate thread to do the back end processing
> 2) break the function into short chunks and use a timer
> (after() in Tkinter) to repeatedly fire the function
> (this is the traditional GUI approach)
> 3) In Python 3.4 use asyncore to create an asynchronous event
> loop and feed the functions into that.
>
> ...
> def long_handler()
> update_status() # change the GUI
> getItem(data) # fetch one item from data
> processItem(item) # process one item,
> if data: # is there any more?
> after(20, long_handler) # then go again after 20ms
>
>
> Follow my photo-blog on Flickr at:
> http://www.flickr.com/photos/alangauldphotos
>
>
> Alan and everyone that responded,
Excellent information! It was the concepts that I was falling short on an
this helped me a great deal. In my particular situation, I found using the
after() method indeed worked just fine and was quite simple to implement.
In my case, as simple as this:
def processing(*args): #my initial button click calls this
''' display messages in the information message_frame while the data
is processed '''
info.set('PROCESSING, PLEASE WAIT...') #the label message I was
wanting to get out there to the user
root.after(1000, process_part) #the long running data process
Thanks again!
Bill Allen
More information about the Tutor
mailing list