python - Tkinter Parent Frame 似乎在 Button 内缩小
问题描述
我正在努力在框架内显示一个按钮(它将包含其他按钮)。我将把这个框架放入的根窗口必须组织为一个网格(会有更多的小部件),但框架必须用 pack() 组织。我的目标是使框架填充它分配给的网格单元格,并在此框架内显示按钮。
但是,当我启动此程序时,框架似乎消失或在按钮内缩小。
我怎样才能使框架保持原来的尺寸和里面的按钮?
from tkinter import *
root = Tk()
root.geometry('300x300')
frame=Frame(root, bg="green", width=150, height=150)
frame.grid(row=0, column=0)
Breset=Button(frame,text='Reset', bg='pink')
Breset.pack()
root.mainloop()
解决方案
我怎样才能使框架保持原来的尺寸和里面的按钮?
你几乎从不想那样做。如果您将更多小部件放入其中,框架自然会选择合适的尺寸以适合所有东西。
如果您想让框架填满窗口,您可以使用各种grid
选项来实现。pack
但是,如果您希望框架始终填满整个窗口,那么使用比使用更容易grid
。
包解决方案
要frame
填充根窗口,只需使用fill
和expand
选项pack
:
frame.pack(fill="both", expand=True)
网格解决方案
使用grid
需要几个步骤。首先,您需要使用该sticky
选项,以便框架填充它分配的空间。接下来,您需要告诉grid
为框架提供未分配的空间。
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
frame.grid(row=0, column=0, sticky="nsew")
关闭框架的自动调整大小
您最初要求的称为几何传播- 这是子代的大小传播到父代的特征。grid_propagate
您可以使用或将其关闭pack_propagate
,具体取决于您用于子小部件的内容。在您的情况下,您使用pack
的是框架内的按钮:
frame.pack_propagate(False)
这几乎总是三种解决方案中最差的。几何管理器的全部意义pack
在于grid
让 tkinter 完成所有决定小部件大小的工作。
推荐阅读
- snowflake-cloud-data-platform - 根据 SnowFlake 中表的另一列对列应用动态屏蔽
- typescript - 如何从 blob URL 查看/下载私有 blob?
- android - 使用 Amazon S3 上传具有特定文件夹结构的文件
- android - 布局中的两个 Recyclerview 之一在初始加载时不滚动
- xamarin.forms - ScrollView.ContentSize 未在 Android 上更新嵌套网格中的动态内容
- android - 从 url 加载 EndlessRecyclerViewScrollListener 的最佳实践
- python - 如何检查列表的 isNull
- javascript - 在 React 中,我如何使用孩子?
- python - 将随机键和值的列表转换为字典
- sql - 仅将最低行与另一个表 SQL 中最近的行连接起来