On Dec 5, 3:05 am, "Hendrik van Rooyen" <[EMAIL PROTECTED]> wrote: > "Davy" <[EMAIL PROTECTED]> wrote: > > I have used Tkinter after() to do loop update GUI in my previous post. > > 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) > > Do you want it to block, or do you want it to time out?
Hi Hendrik, nice comments :-) Do you think block and time out are contradict to each other? > > > print 'get', data_queue.qsize() > > draw_canvas(board, canvas_b, x, y, block_width, block_height) > > time.sleep(0.3) > > this will make the gui unresponsive for the time > > > ##canvas_b.after(300, lambda:draw_canvas_loop(canvas_b)) > > and then the control runs off the end of the function. > > > So, can I use time.sleep() in GUI application? Or Tkinter scheduler > > just ignore the sleep() function? > > time.sleep(sleep_time) will effectively suspend the gui mainloop > (if it is in the mainloop) for the sleep_time, making the gui unresponsive > for that time. Eschew it here. Use it in other, non GUI helper threads. Although I don't understand your explaination very well(I guess maybe .after() re-schedule is better than .sleep unresponsive in GUI application?)I will take it as a golden rule. > > > > > And if I use after(), will the code form a recursive function call, > > only if it is coded that way - yours does not look recursive to me > > > 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...). > > 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) > > Here you draw a new canvas object - what has happened to the > previous one? Is it possibly still hanging around? Should you > do something about it? Yeah, I forgot to *delete* the rectangle object I generate before. One more question, besides create/delete method, can I just create two rectangles (one black/one white), and assign two tags to these two rectangles, and place rectangle by just using tags(that is, can I place one object on several places of the canvas)? > > - Hendrik -- http://mail.python.org/mailman/listinfo/python-list