当小部件跨越多列时如何使 Tkinter 列具有相等的宽度(Python 2.7)

Wes*_*pse 4 python tk-toolkit tkinter tcl python-2.7

在下面,标有“ONE”、“TWO”和“THR”的按钮没有均匀分布。在我看来,问题的根源在于 Tk 假设任何包含跨越多列的小部件的一部分的列的默认最小宽度。但是,这种行为似乎没有记录,所以我不确定如何适应或调整它以使列具有相等的宽度 - 包括文本小部件跨越的两列和文本未跨越的单列小部件 - 从而均匀地间隔开按钮。我可以通过反复试验来拼凑它,即填充后一列直到它与前两列匹配,但这似乎是一个糟糕的解决方案。

编辑:在下面与@jwillis0720 的讨论之后,我添加了一个额外的列 (3) 和按钮 ('FIV') 以使问题更清晰。这个问题是关于当其中一些列被多列小部件跨越而其他列不是时如何使列具有相同的宽度。

import Tkinter

master = Tkinter.Tk()

Tkinter.Button(master, text='ONE').grid(row=0, column=0)
Tkinter.Button(master, text='TWO').grid(row=0, column=1)
Tkinter.Button(master, text='THR').grid(row=0, column=2)
Tkinter.Button(master, text='FOU').grid(row=1, column=2)
Tkinter.Button(master, text='FIV').grid(row=0, column=3) # added as per above edit
Tkinter.Text(master).grid(row=1, column=0, columnspan=2)

master.mainloop()
Run Code Online (Sandbox Code Playgroud)

请注意,使用grid_columnconfigurewithuniform并不能解决这个问题。插入以下几行(请参阅此处对类似问题的回答:How to create equal-width columns in Python 2.7 with Tkinter)只会使列变得有弹性;它们的大小仍然不均匀:

master.grid_columnconfigure(0, weight=1, uniform='a')
master.grid_columnconfigure(1, weight=1, uniform='a')
master.grid_columnconfigure(2, weight=1, uniform='a')
master.grid_columnconfigure(3, weight=1, uniform='a') # added as per above edit
Run Code Online (Sandbox Code Playgroud)

jwi*_*720 5

我想你可能想使用粘性选项。

sticky= 定义如果生成的单元格大于小部件本身,则如何展开小部件。这可以是常数 S、N、E 和 W 或 NW、NE、SW 和 SE 的任意组合。

例如,W (west) 表示小部件应与左单元格边框对齐。W+E 意味着应该水平拉伸小部件以填充整个单元格。W+E+N+S 意味着小部件应该在两个方向上展开。默认是使小部件在单元格中居中。

import Tkinter

master = Tkinter.Tk()

Tkinter.Button(master, text='ONE').grid(row=0, column=0, sticky='NW')
Tkinter.Button(master, text='TWO').grid(row=0, column=1, sticky='NW')
Tkinter.Button(master, text='THR').grid(row=0, column=2, sticky='NW')
Tkinter.Button(master, text='FOU').grid(row=1, column=2)
Tkinter.Text(master).grid(row=1, column=0, columnspan=2)


master.mainloop()
Run Code Online (Sandbox Code Playgroud)

编辑

它是什么样子的。我的看起来像这样均匀间隔,除了文本小部件占用指定的两列。

它看起来像这样吗