tkinter redraw rates

Dave Angel davea at davea.name
Wed Jul 17 13:38:34 EDT 2013


On 07/17/2013 09:18 AM, fronagzen at gmail.com wrote:
> On Wednesday, July 17, 2013 7:42:45 PM UTC+8, Dave Angel wrote:
>> On 07/17/2013 07:10 AM, fronagzen at gmail.com wrote:
>>> On Wednesday, July 17, 2013 6:07:22 PM UTC+8, Dave Angel wrote:
>>>> On 07/16/2013 11:04 PM, fronagzen at gmail.com wrote:
>>>>> Noted on the quoting thing.
>>>>> Regarding the threading, well, first, I'm not so much a programmer as someone who knows a bit of how to program.
>>>>> And it seems that the only way to update a tkinter window is to use the .update() method, which is what I was experimenting with. Start up a new thread that just loops the .update() with a 1ms sleep until the download is done. It seems to work, actually.
>>>> update() is to be used when it's too awkward to return to mainloop.  In
>>>> my second approach, you would periodically call it inside the processing
>>>> loop.  But unless tkinter is unique among GUI's, it's unsafe to do that
>>>> in any thread besides the GUI thread.
>>>> DaveA
>>> Yes, based on advice from this thread, I'm doing that. From my main thread, I create a thread that handles the download while updating a variable that the mainloop displays as a text output, and in that mainloop, I have a while loop that updates the GUI until the downloading is done.
>> I can't figure out what you're really doing, since each message from you
>> says something different.  You don't need a separate while loop, since
>> that's exactly what app.mainloop() is.
>> --
>>
>> DaveA
>
> Hm. My apologies for not being very clear. What I'm doing is this:
>
>          self.loader_thread = Thread(target=self.loadpages,
>                                      name="loader_thread")
>          self.loader_thread.start()
>          while self.loader_thread.isAlive():
>              self.root_window.update()
>              sleep(0.05)
>
> Where loadpages is a function defined elsewhere.
>

Presumably this fragment is from a method of some class you've written. 
  Is it an event handler, or is this happening before you finish setting 
up the GUI?  Somewhere at top-level, you're supposed to fall into a call 
to mainloop(), which doesn't return till the user cancels the app.



-- 
DaveA




More information about the Python-list mailing list