当Widget跨越多列时,如何使Tkinter列等宽?

2022-03-01 00:00:00 python tkinter tk tcl

问题描述

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

编辑:在下面使用@jwill is0720进行讨论之后,我添加了额外的列(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()
请注意,将grid_columnconfigureuniform配合使用不能解决此问题。插入以下行(请参阅此处类似问题的答案:How to create equal-width grid columns 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

解决方案

我认为您可能需要使用粘滞选项。

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

编辑

它看起来是什么样子。除了文本小部件按指定占据两列之外,我的小部件看起来像这样均匀分布。

相关文章