在Python Tkinter中使用网格布局拉伸框架

时间:2012-03-15 21:43:33

标签: python user-interface tkinter

我正在尝试使用Python 2.6.7和Tkinter一起工作。我希望下面的代码可以将第一个按钮拉伸到第二个按钮的宽度,但两个按钮的宽度只能与它们的文本一致。

#!/usr/bin/python
from Tkinter import *

win = Frame()
win.grid(sticky=N+S+E+W)

inner_a = Frame(win)
inner_a.grid(row=0, column=0, sticky=N+E+W)
inner_b = Frame(win)
inner_b.grid(row=1, column=0, sticky=S+E+W)

Button(inner_a, text='1').grid(row=0, column=0, sticky=E+W)
Button(inner_b, text='Some long text').grid(row=0, column=0, sticky=E+W)

win.mainloop()

根据我的理解,win中的单个列会扩展到它包含的最大内容的宽度,即inner_b的宽度,然后是inner_a的宽度,以及从第一个按钮开始,将是第二个按钮。

实际上,下面会发生什么?第一个按钮的宽度足以包含“1”,而不是第二个按钮。

Screen shot: two buttons stacked on top of each other, the first has the single character "1", the second the words "Some long text". The bottom button is considerably wider than the top.

我需要做什么才能获得第一个按钮来扩大第二个按钮的大小?

1 个答案:

答案 0 :(得分:9)

如果您希望小部件在网格中排成一行,首先要确保它们具有相同的父级。如果所有小部件的大小相同或者您只使用一列,则这不是必需的。

您需要做的另一件事是给您的柱子增加重量。您的代码中发生的事情是窗口小部件 扩展以填充列,但该列未扩展以填充主列。如果你给它一个1的重量。您需要执行类似inner_a.columnconfigure(1, weight=1)的操作,然后对inner_b执行此操作。