2012-03-15 42 views
3

我想要延伸到使用Python 2.6.7和Tkinter一起工作。我期望下面的代碼將第一個按鈕拉伸到第二個按鈕的寬度,但是這兩個按鈕的寬度只有它們需要適合的文本寬度。在Python中使用網格佈局來拉伸框架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.

什麼我需要做的就是第一個按鈕,展開第二的大小?

回答

8

如果您希望小部件排列在網格中,首先要做的是確保它們具有相同的父級。如果所有小部件的大小相同,或者您只使用一列,則這不是必需的。

你需要做的另一件事是給你的專欄權重。你的代碼中發生的事情是,小部件擴展到填充列,但該列未擴展以填充主控。如果你給它1的重量,它會的。你需要做一些類似於inner_a.columnconfigure(1, weight=1)的事情,然後再做inner_b

+1

爲小部件提供相同的直接父項不是一種選擇;這是真正問題的最小例子,將相關小部件作爲直接孩子確實不是一種選擇。儘管如此,修復重量(對於列'0',而不是在你的答案中的'1'),但是,謝謝! – 2012-03-16 16:44:14

+2

@me_and:您是否知道您可以將小部件放在與父項不同的容器中?這是一個非常有價值的技術。網格有一個'in_'選項,打包和放置命令來做到這一點。 – 2012-03-17 01:38:39

+0

感謝您的回答:D – holmeswatson 2014-04-27 17:10:11