首页 > 解决方案 > 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()

标签: pythontkintertkinter-layout

解决方案


我怎样才能使框架保持原来的尺寸和里面的按钮?

你几乎从不想那样做。如果您将更多小部件放入其中,框架自然会选择合适的尺寸以适合所有东西。

如果您想让框架填满窗口,您可以使用各种grid选项来实现。pack但是,如果您希望框架始终填满整个窗口,那么使用比使用更容易grid

包解决方案

frame填充根窗口,只需使用fillexpand选项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让 t​​kinter 完成所有决定小部件大小的工作。


推荐阅读