Варианты интервалов Tkinter.grid?
Я новичок в 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
макеты. Спасибо за помощь!
2 ответа
Вы можете указать интервал для столбцов / строк в сетке (включая те, которые не содержат виджетов), запустив grid_columnconfigure
а также 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 = Определяет минимальный размер строки. Обратите внимание, что если строка полностью пуста, она не будет отображаться, даже если эта опция установлена.
(курсив мой), но, кажется, он работает даже для пустых строк и столбцов, насколько я пытался.
По умолчанию строка имеет нулевую высоту, а столбец имеет нулевую ширину. Таким образом, строки и столбцы, в которых ничего нет, будут невидимыми и не займут места.