Python 在更新小部件时,您什么时候*不*需要使用网格?忘记?

Python 在更新小部件时,您什么时候*不*需要使用网格?忘记?,python,tkinter,Python,Tkinter,我在看tkinter教程,其中讲师使用grid\u-forget方法删除包含图像的标签,然后再添加新图像。他解释说,这是为了防止新图像与旧图像重叠。然而,在本教程的后面部分,他更新了按钮的功能,创建了一个新按钮,并将其添加到网格中的同一单元格中,而没有调用grid\u forget。他从来没有解释为什么这里不需要网格 在我看来,如果新图像与旧图像重叠而没有grid\u-forget,那么新按钮也会与旧图像重叠,如果继续调用此按钮,可能会导致内存泄漏。但显然情况并非如此。为什么情况会有所不同 更一

我在看tkinter教程,其中讲师使用
grid\u-forget
方法删除包含图像的标签,然后再添加新图像。他解释说,这是为了防止新图像与旧图像重叠。然而,在本教程的后面部分,他更新了按钮的功能,创建了一个新按钮,并将其添加到网格中的同一单元格中,而没有调用
grid\u forget
。他从来没有解释为什么这里不需要网格

在我看来,如果新图像与旧图像重叠而没有
grid\u-forget
,那么新按钮也会与旧图像重叠,如果继续调用此按钮,可能会导致内存泄漏。但显然情况并非如此。为什么情况会有所不同


更一般地说,小部件什么时候需要用
grid\u-forget
显式清除,什么时候只需添加到同一单元格就可以隐式清除?

这是一个糟糕的教程。您永远不应该通过重新创建小部件来更新它,您应该使用config方法来更新已经存在的小部件


但要回答你的问题:他本应该移除旧按钮,但可能没有,因为新按钮保证与旧按钮大小相同或更大,因此完全覆盖了它。不过,旧按钮仍将保留在内存中,当您构建一个按钮堆栈时,它们会减慢您的程序,因此再次说明,这样做是一个非常糟糕的主意。它永远不会被隐式清除,只会被覆盖。

谢谢您的帮助!我很高兴我问了这个问题,因为如果不是这样的话,我最终会做错事,遇到问题。教程系列看起来非常专业和深入,所以我大部分都同意,但那部分让我觉得很奇怪。听起来好像编写教程的人对tkinter的工作原理了解不够。