time.sleep() and Tkinter after()?

Davy zhushenli at gmail.com
Wed Dec 3 22:20:33 EST 2008


Hi all,

I have used Tkinter after() to do loop update GUI in my previous post.
See http://groups.google.com/group/comp.lang.python/browse_thread/thread/6b616abc236c345b/7df7684d33c969c5#7df7684d33c969c5

And I tried to change after() to time.sleep(), but it seems doesn't
work at all, the Queue send and receive data properly, but the GUI
didn't even appear?

//-----code changed-----
def draw_canvas_loop(canvas_b):
    while (True):
        board = data_queue.get(block = True, timeout=2)
        print 'get', data_queue.qsize()
        draw_canvas(board, canvas_b, x, y, block_width, block_height)
        time.sleep(0.3)
    ##canvas_b.after(300, lambda:draw_canvas_loop(canvas_b))
//--------------------------------

So, can I use time.sleep() in GUI application? Or Tkinter scheduler
just ignore the sleep() function?

And if I use after(), will the code form a recursive function call,
and the memory usage will boost as the program goes (I have watched
the task manager in WinXP and find the python.exe eat more and more
memory...).
//------code-----------
def draw_canvas_loop(canvas_b):
    board = data_queue.get(block = True, timeout=1)
    print 'get', data_queue.qsize()
    draw_canvas(board, canvas_b, x, y, block_width, block_height)
    canvas_b.after(300, lambda:draw_canvas_loop(canvas_b))
//-------------------------

Best regards,
Davy



More information about the Python-list mailing list