在python中使用多个帧时保持网格间距

在python中使用多个帧时保持网格间距,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我试图让我的顶部框架在所有三个标签之间有相等的间距。我不想硬编码“不可见”标签的宽度来分隔它们,因为底部框架以后可能需要扩展窗口大小。 现在,左边的标签是左边的,然后有一个巨大的灰色区域,看起来不属于任何标签,最后中间和右边的标签在右边挤压。有更好的方法吗 from tkinter import * from tkinter import ttk #Build buttons def create_buttons(): for y in range(6): fo

我试图让我的顶部框架在所有三个标签之间有相等的间距。我不想硬编码“不可见”标签的宽度来分隔它们,因为底部框架以后可能需要扩展窗口大小。 现在,左边的标签是左边的,然后有一个巨大的灰色区域,看起来不属于任何标签,最后中间和右边的标签在右边挤压。有更好的方法吗

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()

最简单的解决方案是使顶部框架中的所有三根柱的重量相等。这意味着每一个都将填充等量的额外空间。如问题中所述,第一列定义为占用所有额外的水平空间

如果希望跨平台工作,您还需要使用tkinter标签小部件而不是ttk标签小部件。例如,在mac上,ttk小部件忽略背景

对我来说,当我把小部件放在一行或一列中时,我发现这个包工作得最好。但是,做我建议的更改,网格工作也很好


显然,网格非常适合在网格中布局,但它确实意味着您必须采取额外的步骤,为行和列指定权重,以便在窗口大小改变时一切正常

谢谢你的帮助。我上周刚接了tkinter,这一直困扰着我。