Python Tkinter:无法用小部件填充整个框架

Python Tkinter:无法用小部件填充整个框架,python,tkinter,tk,Python,Tkinter,Tk,我试图创建三个框架:顶部、中部和底部。我成功地将小部件添加到顶部和底部框架中,并按照我的需要对它们进行定向 不过,我只是想在中间帧中添加两个入口窗口小部件,它们将跨越框架/窗口的整个宽度。 由于顶部和底部框架中所有小部件的代码长度,我只想包含一段关于如何配置窗口和框架的代码: root = Tk() root.resizable(False, False) top_frame = Frame(root) middle_frame = Frame(root) bottom_frame = Fra

我试图创建三个框架:顶部、中部和底部。我成功地将小部件添加到顶部和底部框架中,并按照我的需要对它们进行定向

不过,我只是想在中间帧中添加两个入口窗口小部件,它们将跨越框架/窗口的整个宽度。

由于顶部和底部框架中所有小部件的代码长度,我只想包含一段关于如何配置窗口和框架的代码:

root = Tk()
root.resizable(False, False)

top_frame = Frame(root)
middle_frame = Frame(root)
bottom_frame = Frame(root)

# I think this block is irrelavant to the question, but including it anyway just incase
rows = 0
while rows < 36:
    top_frame.rowconfigure(rows, weight=1)
    top_frame.columnconfigure(rows, weight=1)
    bottom_frame.rowconfigure(rows, weight=1)
    bottom_frame.columnconfigure(rows, weight=1)
    rows += 1

top_frame.grid(row=0, column=0)
middle_frame.grid(row=1, column=0)
bottom_frame.grid(row=2, column=0)
然而,它们只是停留在中间框架的中心。我尝试了很多解决方案,但似乎没有任何东西能改变这些入门小部件在框架中的外观——始终居中,从不改变大小。我甚至试着把它们打包,把它们的填充量设为X。我可能忽略了一些非常简单的事情,但我不太明白


问题的根源在于中间框架没有配置为填充整个窗口,因此内部的小部件不会填充整个窗口

第一步是使用中间窗口上的
sticky
选项:

middle_frame.grid(row=1, column=0, sticky="ew")
接下来,您还没有告诉网格如何处理根窗口中的额外空间。根据经验法则,任何使用
grid
管理其子项的小部件都应该至少有一行和一列的权重大于零

若要使中间框架占据窗口的整个宽度,请为该列指定非零权重:

root.grid_columnconfigure(0, weight=1)
中间框架中也存在同样的问题:您没有指示
grid
如何处理额外空间。根据经验法则,我们需要在中间框架内为零列指定权重:

middle_frame.grid_columnconfigure(0, weight=1)

这将允许中间帧中的入口窗口填充中间帧,并且我们已经配置了应用程序,使中间帧填充窗口的完整宽度。

问题的根源在于中间帧没有被配置为填充窗口的全宽度,因此内部的窗口小部件不会填充窗口的完整宽度。

第一步是使用中间窗口上的
sticky
选项:

middle_frame.grid(row=1, column=0, sticky="ew")
接下来,您还没有告诉网格如何处理根窗口中的额外空间。根据经验法则,任何使用
grid
管理其子项的小部件都应该至少有一行和一列的权重大于零

若要使中间框架占据窗口的整个宽度,请为该列指定非零权重:

root.grid_columnconfigure(0, weight=1)
中间框架中也存在同样的问题:您没有指示
grid
如何处理额外空间。根据经验法则,我们需要在中间框架内为零列指定权重:

middle_frame.grid_columnconfigure(0, weight=1)

这将允许中间帧中的入口窗口填充中间帧,并且我们已经配置了应用程序,以便中间帧填充窗口的完整宽度。

条目最有可能正在填充框架——但是,您没有做任何事情来使框架比它需要的更大,以保持其默认大小的条目。也给那一帧
sticky=E+W
。(调试提示:临时为框架添加边框或背景色可以看到它们有多大。)条目很可能正在填充框架-但是您没有做任何事情使框架比需要的大,以保持条目的默认大小。也给那一帧
sticky=E+W
。(调试提示:临时为帧添加边框或背景色可以看到它们有多大。)宾果。我以前曾尝试将weight=1添加到根的行/列中,但对于中间帧,我也忽略了这样做。非常感谢你!答对 了我以前曾尝试将weight=1添加到根的行/列中,但对于中间帧,我也忽略了这样做。非常感谢你!