python root.mainloop后代码不能执行_Tkinter理解mainloop

本文探讨了在Tkinter中使用`root.mainloop()`后代码无法执行的问题,并提供了两种解决方法:使用`update_idletasks()`和`update()`的无限循环,或者利用`after()`方法。`root.mainloop()`会阻止后续代码执行,而`update_idletasks()`和`update()`在处理空闲任务后继续执行,适合于无限循环。`after()`方法则能在不阻塞的情况下重复执行任务,同时保持对用户输入的响应。
摘要由CSDN通过智能技术生成

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处于空闲状态,直到在脚本级别处

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值