Tkinter.grid 间距选项?

问题描述 投票:0回答:3

我是 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 保留每个小部件的相对位置(即

button
位于
label
的上方和右侧),但它忽略之间的任何空格。我已经搜索了一些这个问题并发现了
weight
,但这似乎不是我正在寻找的;我想要一些独立于
label
button
布局的东西。感谢您的帮助!

python python-3.x tkinter grid-layout
3个回答
25
投票

您可以通过在小部件的父级上运行

grid_columnconfigure
grid_rowconfigure
方法来指定网格中的列/行(包括那些不包含小部件的列/行)的间距(在这种情况下,父级将是
root
)。

例如,要设置第四列的最小宽度,请将最后一行添加到代码中:

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=定义行的最小大小。 请注意,如果一行完全为空,即使设置了此选项,也不会显示该行。

(斜体是我的),但据我尝试,即使对于空行和空列,它似乎也适用。


7
投票

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


0
投票

刚刚遇到这个。 如果在放置一些东西之后添加它,它似乎会保持最小高度,但否则不会

© www.soinside.com 2019 - 2024. All rights reserved.