2013-07-12 31 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