我是 tkinter 的新手。有时,当我从 github 上读取代码时,它包含类似root.update().
当我搜索 tkinter 的文档时,我通常会找到每个小部件的方法列表,但找不到Tk()根对象本身。另外,通常当我为每个小部件设置配置时,它会自动更新视图。所以我有点困惑我应该什么时候使用root.update()?
答案应该是永远不会。即使您的代码可以工作,.update()也没有人会这样做。简单的回答是,您永远不会知道此时此刻您正在使用此命令做什么。.update_idletasks()代替使用。
从文档中:
更新服务所有未完成的事件,包括更新运行时到期的事件。提供它是为了允许立即执行刷新 GUI 等任务。协程提供了另一种构建代码的方法,以便可以在控制流中的战略点为事件提供服务。甚至在协程可用之前,许多 Tcl 程序员就发现,如果需要使用更新,则表明应该重构脚本。
更新的工作原理是循环执行以下步骤,直到一次迭代中没有事件被服务为止:
为预定时间已到的第一个活动提供服务。如果未找到此类事件,则为当前空闲队列中的所有事件提供服务,但不为该步骤开始后添加的事件提供服务。
updateidletasks跳过第一步,仅处理空闲队列中的事件。
问题是更新实际上具有不受限制的副作用。调用 update 的代码不知道更新过程中任何随机事件处理程序可能对其数据执行了哪些操作。这一事实是阴险错误的根源。