Tkinter Parent Frame 似乎在 Button 内部缩小

Tkinter Parent Frame seems to shrinks inside Button

我很难在框架内显示按钮(其中将包含其他按钮)。根 Window 我将把这个框架放入必须组织为一个网格(会有更多的小部件),但框架必须用 pack() 组织。我的目标是让 Frame 填充它指定的 Grid 单元格,并在此框架内显示按钮。

但是,当我启动这个程序时,框架似乎消失了或缩小到按钮内部。

如何让 Frame 在 Button 内部保持原来的尺寸?

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()

How can I make the Frame keep its original dimensions with the Button inside?

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

如果您想让框架填充 window,您可以使用各种 grid 选项来实现。但是,如果您希望框架始终填满整个 window,使用 packgrid.

更容易做到

打包解决方案

要让 frame 填充根 window,只需使用 fillexpand 选项以及 pack:

frame.pack(fill="both", expand=True)

网格解决方案

使用 grid 需要更多步骤。首先,您需要使用 sticky 选项,以便框架填充它分配的 space。接下来,您需要告诉 grid 将未分配的 space 分配给框架。

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
frame.grid(row=0, column=0, sticky="nsew")

关闭框架的自动调整大小

您最初要求的称为 几何传播 - 这是子项的大小向上传播到父项的功能。您可以使用 grid_propagatepack_propagate 将其关闭,具体取决于您对子窗口小部件的使用。在您的情况下,您使用 pack 作为框架内的按钮:

frame.pack_propagate(False)

这几乎总是三个解决方案中最差的。几何管理器 packgrid 的重点是让 tkinter 完成决定小部件尺寸的所有工作。