在tkinter中何时使用pack或grid布局?

33 投票
3 回答
42555 浏览
提问于 2025-04-16 08:18

关于在布局中使用 pack 和 grid 的最佳实践,有哪些建议呢?

根据我在网上查到的信息,大家的看法似乎是 grid 可以处理任何 pack 的情况,但反过来就不一定。

为了引入这个话题,似乎有一个场景更适合使用 grid 而不是 pack,那就是当我们想要显示或隐藏一些小部件时。

3 个回答

3

我个人觉得使用网格布局要简单很多,所以我会选择它。当然,你可能也听说过,有一点是绝对不能做的,那就是在同一个容器里同时使用这两种布局。感谢Bryan Oakley指出了这一点。

10

我总是建议在做精致的应用时使用网格布局,而不是打包布局。其实,打包布局只有在一些特殊情况下(比如所有东西都在一行或一列时)才比较简单好用。网格布局的“组合性”更强,比如可以把大部件或网格中的元素再进行网格化。选择网格布局的原因在于它提供了更多的细节调整选项,比如权重(这会影响到元素的扩展和收缩)、最小尺寸和最大尺寸,还有一些方便的功能,比如强制保持行列的统一。

无论多大的应用,使用网格布局的应用所需的框架数量都会比使用打包布局的应用少得多,并且对内部元素的收缩和扩展控制也更好。

顺便说一下,打包布局和网格布局都可以显示或隐藏子元素,不过它们的语法稍微有点不同。网格布局稍微好一点,因为它的“移除”操作(而不是“忘记”)可以记住子部件的网格选项。

19

这两者没有谁更好,都是有优缺点的。了解它们的特点后,选择哪个就会变得很明显。

如果你需要把东西排成网格,使用 grid 会简单很多。如果你只是想把一些小部件放在一行或一列,使用 pack 通常会更容易。在这两者之间还有很多情况,哪种更好并不一定。

还有一点要考虑的是你在问题中提到的:如果你想在运行时显示和隐藏小部件,使用 grid 可能是最好的选择,因为它有一个 grid_remove 方法,可以记住所有设置的属性值,以便你想重新添加小部件时使用。

就我个人而言,我总是优先选择使用 pack,因为我最开始学 Tk 的时候还没有 grid 这个命令。如果我在 pack 中做不太容易,或者我很明显需要排成网格,我才会使用 grid

撰写回答