我知道您不能同时使用pack
和grid
,但是为什么呢?为什么会引发错误?
_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid
原因是每个人都希望控制给定容器(框架,顶层等)内所有小部件的几何形状,并且每个人在检测到所控制的小部件更改大小时将重新应用其规则。
例如,如果您从使用pack开始,pack将根据其自身的算法将小部件添加到窗口中。根据窗口小部件的大小和方向,这可能导致窗口增大或缩小,并可能导致具有相同母版的其他窗口小部件增大或缩小。
现在,如果您使用grid
添加小部件,它将做同样的事情-它将使用自己的算法添加小部件。像pack
一样,这可能导致窗口增大或缩小,或者窗口小部件更改大小。
接下来,因为pack
正在管理某些小部件,所以当它检测到窗口大小已更改时,它将重新应用自己的算法,可能会更改某些小部件的大小或位置。
接下来,由于某些小部件由网格管理,它将检测到它们的大小已更改,并且将尝试重新应用其算法。这可能会导致窗口增大或缩小,或更改某些小部件的大小。
接下来,由于某些小部件由包管理,它将检测到它们的大小已更改,因此它将尝试重新应用其算法。这可能会导致窗口增大或缩小,或更改某些小部件的大小。
接下来,由于某些小部件由网格管理,它将检测到它们的大小已更改,因此它将尝试重新应用其算法。这可能会导致窗口增大或缩小,或更改某些小部件的大小。
接下来,由于某些小部件由包管理,它将检测到它们的大小已更改,因此它将尝试重新应用其算法。这可能会导致窗口增大或缩小,或更改某些小部件的大小。
...依此类推,直到时间结束,或直到某个原因导致此循环结束为止。
实际上,如果您非常小心并且确切知道会发生什么情况,则可以将两个都用于共享同一父对象的小部件,但是我从来没有遇到过这样做的正当理由。 您也绝对可以(和 应该