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