【问题标题】:Tkinter: trouble filling entire frame with widgetTkinter:无法用小部件填充整个框架
【发布时间】:2020-02-13 00:12:33
【问题描述】:

我正在尝试创建三个框架:顶部、中间和底部。我成功地将小部件添加到我的顶部和底部框架中,并按照我想要的方式定位它们。

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

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

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

【问题讨论】:

  • 条目最有可能正在填充框架 - 但是您没有做任何事情来使框架变得比它需要的更大,以将条目保持为默认值尺寸。也给那个框架sticky=E+W。 (调试提示:临时为 Frames 添加边框或背景颜色可以查看它们的大小。)

标签: python tkinter tk


【解决方案1】:

问题的根源是中间框架没有配置为填充窗口的整个宽度,所以里面的小部件不会填充窗口的整个宽度。

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

middle_frame.grid(row=1, column=0, sticky="ew")

接下来,您还没有告诉grid 如何处理根窗口中的额外空间。根据经验,任何使用grid 管理其子级的小部件都应至少有一行和一列的权重大于零。

要让中间框架占据窗口的整个宽度,给它所在的列赋予非零权重:

root.grid_columnconfigure(0, weight=1)

同样的问题存在于中间框架中:你没有指导grid 如何处理额外的空间。根据经验法则,我们需要在中间框架内为第 0 列赋予权重:

middle_frame.grid_columnconfigure(0, weight=1)

这将允许中间框架中的条目小部件填充中间框架,并且我们已配置应用程序以使中间框架填充窗口的整个宽度。

【讨论】:

  • 宾果游戏。我之前曾尝试将 weight=1 添加到根的行/列,但忽略了对中间帧也这样做。非常感谢!
猜你喜欢
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多