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

me_*_*and 5 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()
Run Code Online (Sandbox Code Playgroud)

根据我的理解,单列win将扩展到它包含的最大东西的宽度,即第一个按钮inner_b的宽度inner_a,然后是第一个按钮的宽度,以及第一个按钮的宽度.

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

屏幕截图:两个按钮叠在一起,第一个有单个字符

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

Bry*_*ley 9

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

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

  • @me_and:您是否知道可以将小部件放在与其父级不同的容器中?这是一种非常有价值的技术.网格有一个`in_`选项,pack和place命令可以执行此操作. (2认同)