2013-07-12 58 views
0

我試圖讓我的頂框架在所有三個標籤之間具有相等的間距。我不想硬編碼「不可見」標籤的寬度來區分它們,因爲底部框架可能需要稍後擴大窗口大小。 現在,左邊的標籤被留下,然後有一個巨大的灰色區域看起來不屬於任何標籤,然後最後右側的中間和右側標籤被壓縮。有一個更好的方法嗎?使用多個框架時保持網格在蟒蛇間距

from tkinter import * 
from tkinter import ttk 

#Build buttons  
def create_buttons(): 
    for y in range(6): 
     for x in range(6): 
      ttk.Button(bot_frame, width = 5, text = str(x) + "," + str(y)).grid(column = x, row = y, sticky = W) 

root = Tk() 

#top frame 
top_frame = ttk.Frame(root, padding = "4 4 4 4") 
top_frame.grid(column = 0, row = 0, sticky = (N, E, S, W)) 
top_frame.columnconfigure(0, weight = 1) 
top_frame.rowconfigure(0, weight = 1) 
top_frame['borderwidth'] = 2 
top_frame['relief'] = 'sunken' 

#bottom frame 
bot_frame = ttk.Frame(root, padding = "4 4 4 4") 
bot_frame.grid(column = 0, row = 2, sticky = (N, E, S, W)) 
bot_frame.columnconfigure(0, weight = 1) 
bot_frame.rowconfigure(0, weight = 1) 
bot_frame['borderwidth'] = 2 
bot_frame['relief'] = 'sunken' 

#Top labels 
left_lbl = ttk.Label(top_frame, background = 'black', foreground = 'green', width = 5, text = "left").grid(column = 0, row = 0, sticky = (N, W)) 
center_lbl = ttk.Label(top_frame, background = 'red', width = 6, text = 'center').grid(column = 1, row = 0, sticky = (N, E, S, W)) 
right_lbl = ttk.Label(top_frame, background = 'black', foreground = 'green', width = 5, text = "right").grid(column = 2, row = 0, sticky = (N, E)) 

create_buttons() 

root.mainloop() 

回答

0

最簡單的解決方法是給出頂部框架中的所有三列等重。這意味着每個人都將填補相當數量的額外空間。如問題中所寫,第一列被定義爲佔用所有額外的水平空間。

如果您希望跨平臺工作,您還需要使用tkinter Label小部件而不是ttk標籤小部件。例如,在mac上,ttk小部件的背景被忽略。

對於我來說,當我在單行或單列中放置小部件時,我發現該包的效果最好。但是,我建議的更改和網格也可以正常工作。

網格非常適合在網格中放置東西,但這確實意味着如果您希望在窗口更改大小時使所有內容都能正常工作,則必須採取額外的步驟爲您的行和列分配權重。

+0

感謝您的協助。上週我剛剛拿起tkinter,這一直在困擾着我。 – Twisted