Tkinter:如何在最大化后删除填充(两个帧调整大小以适应窗口调整大小)?

时间:2014-11-14 23:05:37

标签: python layout tkinter

注意:这是一个q / a问题,我在答案中回答我自己的问题,仅仅为了他人的利益(或者那些知道比我提供的更好的方式的人可以提供它)。

在以下示例中,如何使底部Text窗口小部件填满最大化屏幕时显示的所有空白区域(因此顶部Text窗口小部件直接位于顶部最大化)?我不知道这个额外填充的原因。我可以通过为第二个Text窗口小部件添加额外的行来填充和使用rowspan来摆脱一些填充,但仍然有一些剩余。我不希望顶部Text窗口小部件的高度大于1。

from tkinter import *

tk=Tk()

tk.columnconfigure(0, weight=1)
tk.rowconfigure(0, weight=1)
tk.rowconfigure(1, weight=1)

f=Frame(tk)
f2=Frame(tk)

f.grid(row=0, column=0, sticky=E+W)
f2.grid(row=1, column=0, sticky=N+S+E+W)

t=Text(f, height=1)
t2=Text(f2)
l=Label(f, text="label")
b=Button(f, text="button")

l.pack(side=LEFT)
t.pack(side=LEFT, fill=X, expand=True)
b.pack(side=LEFT)
t2.pack(fill=BOTH, expand=True)

tk.mainloop()

2 个答案:

答案 0 :(得分:2)

最简单的解决方案是从第0行中删除权重。当你给出一行(或列......)权重时,你告诉Tkinter它可以用来分配额外空间的比例。如果两列具有相同的重量,则它们获得相同比例的额外空间。因此,如果两行的权重均为1,则每个行都会获得相等比例的额外空间。

通过仅为文本窗口小部件行赋予权重1,只有在窗口调整大小时它才会增长。

在大多数情况下似乎最有效的方法是只有一行和一列具有非零空间 - 通常是文本小部件或画布。

答案 1 :(得分:0)

只需将行weight的{​​{1}}设置为1这样的大号。然后它会适当地填充额外的空间(虽然因为按钮的高度与100小部件的高度不同,所以你仍然会有一点间隙)。我不知道这是否是最合适的方式,但它确实有效。

下面:

Text