tk.mainloop() 块 。 这意味着你的python程序的执行停在那里。 你可以看到,通过写作:
while 1: ball.draw() tk.mainloop() print "hello" #NEW CODE time.sleep(0.01)
您将永远不会看到打印语句的输出。 因为没有圈,球不动。
另一方面,方法update_idletasks()和update()在这里:
while True: ball.draw() tk.update_idletasks() tk.update()
…不要阻止; 这些方法完成后继续执行,所以while循环一遍又一遍地执行,这使得球移动。
包含方法调用update_idletasks()和update()的无限循环可以作为调用tk.mainloop()的替代方法。 请注意,整个while循环可以说就像tk.mainloop()一样tk.mainloop()因为while循环之后什么也不会执行。
但是, tk.mainloop()不能代替这些行:
tk.update_idletasks() tk.update()
相反, tk.mainloop()是整个while循环的替代品:
while True: tk.update_idletasks() tk.update()
回应评论:
以下是tcl文档所说的内容:
更新idletasks
这个更新子命令从Tcl的事件队列中清除所有当前计划的空闲事件。 空闲事件用于推迟处理,直到“没有别的事情可做”,典型的用例是Tk的重绘和几何重新计算。 通过推迟这些操作,直到Tk处于空闲状态,直到在脚本级别处