Tkinter.grid 间距选项?

Tkinter.grid spacing options?

我是 Tkinter 的新手,我尝试使用网格布局管理器创建一个应用程序。但是,我似乎无法找到一种方法来按照我想要的方式使用它。我需要做的是模拟一个充满 'cells' 的网格,这样我就可以在单元格 (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 的上方和右侧),但它会忽略中间的任何 space。我搜索了一下这个问题,发现了 weight,但这似乎不是我要找的;我想要独立于 labelbutton 布局的东西。感谢您的帮助!

您可以通过 运行 小部件父级上的 grid_columnconfigure and grid_rowconfigure 方法(在本例中为, 父级为 root).

例如,要设置第 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=Defines the minimum size for the row. Note that if a row is completely empty, it will not be displayed, even if this option is set.

(我的斜体)但据我所试,它似乎对空行和空列也有效。

默认情况下,行高为零,列宽为零。因此,其中没有任何内容的行和列将不可见并且不占用 space.