【问题标题】:Tkinter both 'sticky' and 'rowconfigure' did not fill the empty spaceTkinter 'sticky' 和 'rowconfigure' 都没有填满空白空间
【发布时间】:2020-08-15 18:19:48
【问题描述】:

我在根目录中有 2 个框架,分别称为“header_frame”和“activity_frame”,它们都在同一列中,即“column=0”。我希望两个框架都可以调整大小,与其根父级填充所有空白空间,如下所示:

我已经尝试了所有网格配置的可能性,包括在“root”上设置“rowconfigure”,将activity_frame 设置在header_frame 的“North”上,最后但并非最不重要的一点是,我还尝试将header_frame 设置在南方,这是结果我不想要,因为这些框架共享相同的大小(我希望 header_frame 具有 'maxsize' 属性,但遗憾的是它没有)。所以这是我尝试过的代码:

self.root = root
self.column = ""
self.search = ""
self.root.minsize(500,480)
self.comboboxValue = None
self.root.title("CUCI (CSV Unique Column Identifier)")
self.root.configure(background="powder blue")
self.root.grid_columnconfigure(0,weight=1)
self.root.grid_rowconfigure(0,weight=1)
self.root.grid_rowconfigure(1,weight=1)

#header frame
self.header_frame = tk.Frame(self.root)
self.header_frame.grid(row=0, column=0,sticky="NEW")
self.header_frame.grid_columnconfigure(0,weight=1)
self.header_frame.grid_rowconfigure(0,weight=1)
self.header_frame.configure(background="grey")

#activity Frame
self.activity_frame = tk.Frame(self.root)
self.activity_frame.grid(row=1, column=0,sticky="NEWS")
self.activity_frame.grid_columnconfigure(0,weight=1)
self.activity_frame.grid_rowconfigure(0,weight=1)
self.activity_frame.configure(background="grey",pady=1)

这是我的代码中我没想到的布局结果:

关键是我想用activity_frame填充那些空白空间,以便粘贴在'header_frame'上。请我不希望使用pack(self.activity_frame.pack(fill = tk.X))。我只想使用网格,因为它易于使用

【问题讨论】:

  • 我也尝试过使用 self.header_frame.grid_propagate(0)。但没有运气
  • 调用grid_propagate(0) 几乎从来都不是正确的解决方案。

标签: python-3.x user-interface tkinter window tkinter-layout


【解决方案1】:

间隙的原因是因为您没有将标题框架粘在给定空间的底部。如果您将标题的sticky 属性更改为“nsew”,您将看到标题填充了额外的空间。

self.header_frame.grid(row=0, column=0,sticky="nesw")

我猜你不希望标题框架这么高。如果是这种情况,请将第 0 行的权重设为 0 而不是 1。这样所有额外的未分配空间都将分配给第 1 行。

self.root.grid_rowconfigure(0,weight=0)

完成此操作并添加几个其他小部件来模拟您的屏幕后,它的外观如下:

【讨论】:

  • 我已经在上面的问题中提到了这一点。并且该空间被灰色的 header_frame 背景取代。如果我按照你说的做,现在空白区域是灰色的
  • @AbdullahSaid:我不明白你的评论。通过这些更改,您会得到一个小标题,所有剩余空间都是活动框架。这不是你想要的吗?我不知道你说的“header_activity 背景”是什么意思——什么是“header_activity”?
  • 完全正确。这才是重点。如果我调整垂直窗口大小,我只想扩展滚动的文本栏
  • @AbdullahSaid:那么这段代码正是你想要的——小标题和填充活动框架的其余区域。
  • 哎呀错字。我的意思是 header_frame (包含除滚动文本之外的所有按钮)。现在我如何用 activity_frame 上的滚动文本栏替换那些蓝色间隙