Tkinter:无法用小部件填充整个框架
Tkinter: trouble filling entire frame with widget
我正在尝试创建三个框架:顶部、中间和底部。我成功地将小部件添加到我的顶部和底部框架,并按照我的需要将它们定向。
但是,我只是想在中间框架中添加两个条目小部件,它们将跨越 frame/window 的整个宽度。
由于顶部和底部框架中所有小部件的代码长度,我将包含一段代码来说明如何配置我的 window 和框架:
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)
这是我用于两个条目小部件的代码:
entry_1 = Entry(middle_frame)
entry_2 = Entry(middle_frame)
entry_1.grid(row=0, column=0, sticky=E+W)
entry_2.grid(row=1, column=0, sticky=E+W)
但是,它们只是粘在中框的中央。我尝试了很多解决方案,但似乎没有什么能改变这些条目小部件在框架内的外观——始终居中,从不改变大小。我什至尝试只打包它们并将它们的填充设置为 X。我可能忽略了一些非常简单的东西,但我不太明白。
Here is a picture for reference
问题的根源是中间框架没有配置为填满 window 的整个宽度,所以里面的小部件不会填满 window 的整个宽度.
第一步是使用中间的sticky
选项window:
middle_frame.grid(row=1, column=0, sticky="ew")
接下来,您还没有告诉 grid
如何处理根 window 中的额外 space。根据经验,任何使用 grid
管理其子项的小部件都应至少有一行和一列的权重大于零。
要使中间框架占据 window 的整个宽度,请为其所在的列赋予非零权重:
root.grid_columnconfigure(0, weight=1)
中间框架中存在同样的问题:您没有指示 grid
如何处理额外的 space。根据经验,我们需要在中间框架内给零列一个权重:
middle_frame.grid_columnconfigure(0, weight=1)
这将允许中间框架中的条目小部件填充中间框架,我们已经配置了应用程序,以便中间框架填充 window 的整个宽度。
我正在尝试创建三个框架:顶部、中间和底部。我成功地将小部件添加到我的顶部和底部框架,并按照我的需要将它们定向。
但是,我只是想在中间框架中添加两个条目小部件,它们将跨越 frame/window 的整个宽度。
由于顶部和底部框架中所有小部件的代码长度,我将包含一段代码来说明如何配置我的 window 和框架:
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)
这是我用于两个条目小部件的代码:
entry_1 = Entry(middle_frame)
entry_2 = Entry(middle_frame)
entry_1.grid(row=0, column=0, sticky=E+W)
entry_2.grid(row=1, column=0, sticky=E+W)
但是,它们只是粘在中框的中央。我尝试了很多解决方案,但似乎没有什么能改变这些条目小部件在框架内的外观——始终居中,从不改变大小。我什至尝试只打包它们并将它们的填充设置为 X。我可能忽略了一些非常简单的东西,但我不太明白。
Here is a picture for reference
问题的根源是中间框架没有配置为填满 window 的整个宽度,所以里面的小部件不会填满 window 的整个宽度.
第一步是使用中间的sticky
选项window:
middle_frame.grid(row=1, column=0, sticky="ew")
接下来,您还没有告诉 grid
如何处理根 window 中的额外 space。根据经验,任何使用 grid
管理其子项的小部件都应至少有一行和一列的权重大于零。
要使中间框架占据 window 的整个宽度,请为其所在的列赋予非零权重:
root.grid_columnconfigure(0, weight=1)
中间框架中存在同样的问题:您没有指示 grid
如何处理额外的 space。根据经验,我们需要在中间框架内给零列一个权重:
middle_frame.grid_columnconfigure(0, weight=1)
这将允许中间框架中的条目小部件填充中间框架,我们已经配置了应用程序,以便中间框架填充 window 的整个宽度。