为什么人们说“不要使用place()”?

2024-06-26 00:08:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在为自己开发一个记录笔记的程序,它运行得很好,但是我在使用.pack().grid()选项将所有的小部件放在我想要的地方时遇到了很多问题。在

环顾四周后,我发现我可以使用.place()选项。在我决定使用.place()之前,我在论坛上发现了无数的帖子,说“不要使用.place()!。在

我对其他选择束手无策,所以我决定试试看。结果发现.place()正是我解决布局问题所需要的,我只是不明白为什么每个人都那么讨厌{}。在

.place()是否存在固有的问题?或者人们只是喜欢使用.pack()和{},而不是为了方便使用?在


Tags: 程序部件选项地方记录place布局论坛
2条回答

.place没有什么问题,尽管使用grid和{}可以使代码更易于维护。例如,如果您想添加一个特性,那么place将要求您改变绝对位置的负载,以适应按钮。在

如果你需要使用它然后使用它,它没有真正的问题,它只是不是许多问题的最可维护的解决方案。正如你所说,这是一个偏好和易用性的问题。在

编辑:有一个很好的答案你可以读到here。在

我不知道你有什么证据表明每个人都不要使用。我怀疑,如果你用stackoverflow的帖子来判断,你多半是在读我的意见一百遍,而不是一百种不同的意见。在

我建议不要使用place,主要是因为它需要更多的工作来制作一个能够响应字体、分辨率和窗口大小变化的UI。虽然可以编写一个使用place并对这些事情做出响应的GUI,但它需要大量的工作才能完成。在

packgrid都比place有一个优势,那就是它们允许tkinter正确配置根和Toplevel窗口的大小。使用place必须硬编码大小。Tkinter非常擅长使窗口的大小精确到正确的大小,而不必决定显式的大小。在

此外,使用place的应用程序的长期维护是困难的。如果你想添加一个新的小部件,你几乎肯定要调整每一个小部件。使用grid和{}可以更轻松地添加和删除小部件,而不必更改所有其他小部件的布局。如果我多年来使用tk和tkinter学到了什么的话,那就是我的widget布局在开发过程中会发生很多变化。在

place主要用于边缘情况。例如,如果您想将一个小部件放在另一个小部件的中心,place是非常棒的。另外,如果您想放置一个小部件,使其独立于其他小部件,place也非常适合。在

相关问题 更多 >