何时在 tkinter 中使用包或网格布局?

Posted

技术标签:

【中文标题】何时在 tkinter 中使用包或网格布局?【英文标题】:When to use pack or grid layouts in tkinter? 【发布时间】:2011-05-23 00:28:58 【问题描述】:

关于何时应在布局中使用 pack 与 grid 是否有任何最佳实践提示?

从我通过谷歌阅读的内容来看,似乎网格可以处理任何打包场景,但反之则不行。

要开始对话,似乎有一个偏爱网格与包的用例是当人们想要显示/隐藏小部件时。

【问题讨论】:

【参考方案1】:

两者本质上都不比另一个好。每个人都有优点和缺点。了解这些是什么,选择使用哪个变得显而易见。

grid 如果您需要在网格中布置东西,则使用起来相当容易。如果您只需将一些小部件放在单行或单列中,pack 通常更易于使用。两者之间有很多灰色区域,两者都不一定比另一个更好。

要考虑的另一件事是您在问题中所说的:如果您想在运行时显示和隐藏小部件,grid 可能是最佳选择,因为grid_remove 方法可以记住所有的值如果您想重新添加小部件,则配置属性。

就个人而言,我的第一选择始终是使用pack,因为我第一次学习 Tk 是在没有 grid 命令的时候。如果我在pack 中无法轻松做到这一点,或者如果我非常清楚地将事物布置在网格中,我将使用grid

【讨论】:

谢谢。我也是先学包的,所以默认情况下它是我的偏好。然而,在审查我的代码时,我认为网格可能是我未来更通用的解决方案。【参考方案2】:

我总是推荐 grid over pack 用于抛光应用。只有少数情况下包装更容易并且符合要求(一行或一列中的所有内容)。网格具有更好的“可组合性”(例如网格元素的巨型小部件或网格元素)。更喜欢网格的原因是它提供了额外的微调选项。使用权重(影响增长和缩小顺便说一句)、最小尺寸和最大尺寸,以及强制统一行/列等便利功能。

任何大小的完全网格化应用都将比同等打包应用使用(显着)更少的帧,并且对内部元素具有更好的收缩/扩展控制。

顺便说一句,pack 和 grid 都可以显示/隐藏子元素,尽管两者的语法略有不同。网格稍微好一点,因为“删除”(而不是“忘记”)会记住从属小部件上的网格选项。

【讨论】:

感谢您的意见。像大多数人一样,我开始使用 pack 技术对 Tkinter 进行编程,因为它很简单,而且大多数示例 Tkinter 代码似乎都使用 pack。但是越研究grid layout manager的能力,越觉得它是一种比pack“更好”的通用布局技术。【参考方案3】:

我个人认为网格更容易使用,所以我会使用它。当然,您可能已经阅读过您永远不应该做的一件事,那就是尝试在同一个容器中同时使用这两个。感谢 Bryan Oakley 做出这样的区分。

【讨论】:

@MatrixFron:需要明确的是:您可以同时使用两者,但不能同时在同一个容器中使用。在应用程序中,您可以随意混合和匹配它们。 谢谢。很高兴听到其他人默认使用网格。

以上是关于何时在 tkinter 中使用包或网格布局?的主要内容,如果未能解决你的问题,请参考以下文章

python之tkinter使用-Grid(网格)布局管理器

python tkinter网格定位

无法在tkinter上使用网格调整树视图大小

python tkinter grid 网格

RecyclerView 网格布局

python基础 Tkinter 之 几何管理器