Tkinter.grid间距选项是什么?

12

我是Tkinter的新手,我试图使用网格布局管理器创建应用程序。然而,我似乎找不到一种我想要使用它的方法。我需要做的是模拟一个充满'单元格'的网格, 这样我就可以在(3,8)单元格中放置标签或在(5,1)单元格中放置按钮。以下是我尝试过的示例:

import tkinter as tk
root = tk.Tk()

label = tk.Label(root, text = 'Label')
label.grid(column = 3, row = 8)

button = tk.Button(root, text = 'Button')
button.grid(column = 5, row = 1)

Tkinter保持每个窗口小部件的相对位置(即buttonlabel上方且右侧),但它忽略它们之间的任何空间。我为此问题搜索了一些内容,发现了weight,但那似乎不是我要找的东西;我想要的是独立于labelbutton的布局。感谢您的帮助!

2个回答

24
您可以通过在小部件的父级(在本例中为root)上运行grid_columnconfiguregrid_rowconfigure方法来指定网格中列/行的间距(包括不包含小部件的列/行)。例如,要为第4列设置最小宽度,请将以下最后一行添加到您的代码中:
import Tkinter as tk
root = tk.Tk()

label = tk.Label(root, text = 'Label')
label.grid(column = 3, row = 8)

button = tk.Button(root, text = 'Button')
button.grid(column = 5, row = 1)

root.grid_columnconfigure(4, minsize=100)  # Here

如果您想为所有列和行设置最小大小,则可以使用以下方法迭代它们:
col_count, row_count = root.grid_size()

for col in xrange(col_count):
    root.grid_columnconfigure(col, minsize=20)

for row in xrange(row_count):
    root.grid_rowconfigure(row, minsize=20)

编辑 有趣的是,effbot指出:

minsize=定义行的最小大小。 请注意,如果一行完全为空,则不会显示,即使设置了此选项。

(斜体为我添加) 但就我试过的情况来看,它似乎也适用于空行和空列。


2
名称错误:未定义名称“xrange”。应该使用range()。 - Russell Strauss
2
@RussellStrauss 这段代码是针对Python 2编写的。您正在Python 3上运行它。 - Nouman

7

默认情况下,行高为零,列宽为零。因此,没有任何内容的行和列将是不可见的,并且不会占用任何空间。


除非我们不为该特定列或行设置网格的_minsize_属性。因此,根据其他答案,_effbot_中的内容是错误的,对吗? - nbro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接