2016-08-07 68 views
0

在下面的最小示例代碼中,您可以將當前位於3的最後一個範圍()更改爲6,並注意到與按鈕一起運行時,所有帶有按鈕的框架都會變得更小。我已經配置了6列「lower_frame」,全部是重量1.預期的結果是,無論我放入多少個按鈕,都有6個相同寬度的空列。如果我在其中放置3個按鈕,如下面的示例默認情況下那樣,這些按鈕非常大,只留下約1個按鈕的空間。如果我放入6個按鈕,它們會填充空間並且每個都會變小。Python - 重量大小的框架

無論我實際放置在單元格中有多少個小部件,我如何實現具有等寬列的預期結果?這裏的目標是基於屏幕比例而不是像素大小的這些按鈕的標準大小,並且無論按鈕的數量如何,都始終保持相同。我意識到我可以用邊界框來做一堆數學運算,並且在運行時以編程方式設置大小,但這看起來像是矯枉過正,缺乏優雅。

最小例如:

import Tkinter as tk 
import ttk 

mods = {} 
modBtns = {} 

root = tk.Tk() 
upper_frame = ttk.Frame(master=root) 
lower_frame = ttk.Frame(master=root) 
right_frame = ttk.Frame(master=root) 
root.columnconfigure(0, weight=3) 
root.columnconfigure(1, weight=1) 
root.rowconfigure(0, weight=1) 
root.rowconfigure(1, weight=5) 

for i in range(6): 
    lower_frame.columnconfigure(i, weight=1) 
for i in range(5): 
    lower_frame.rowconfigure(i, weight=1) 

upper_frame.grid(column=0, row=0, sticky=tk.N + tk.S + tk.E + tk.W) 
lower_frame.grid(column=0, row=1, sticky=tk.N + tk.S + tk.E + tk.W) 
right_frame.grid(column=1, row=0, sticky=tk.N + tk.S + tk.E + tk.W) 

for i in range(3): 
    mods[i] = ttk.Frame(master=lower_frame) 
    mods[i].columnconfigure(0, weight=1) 
    mods[i].rowconfigure(0, weight=1) 
    modBtns[i] = ttk.Button(master=mods[i], text="mod{0}".format(i)) 
    modBtns[i].grid(column=0, row=0, sticky=tk.N + tk.S + tk.E + tk.W) 
    mods[i].grid(column=i, row=0, sticky=tk.N + tk.S + tk.E + tk.W) 

root.geometry("700x700+0+0") 
root.mainloop() 
+0

我意識到這個例子並不是最小的,我只是試圖反映我的實際項目的佈局。 – linus72982

回答

1

如果你想所有的行和所有列具有相同的寬度/高度,你可以設置每行和每列的uniform屬性。所有具有相同uniform值的列將具有相同的寬度,並且具有相同uniform值的所有行將具有相同的高度。

注意:只要符合,uniform屬性的實際值是無關緊要的。

for i in range(6): 
    lower_frame.columnconfigure(i, weight=1, uniform='whatever') 
for i in range(5): 
    lower_frame.rowconfigure(i, weight=1, uniform='whatever')