Я просматриваю документацию по Tkinter, и мне любопытно, как ведут себя виджеты, когда они имеют одинаковую строку и столбец с помощью диспетчера grid
.
.Я могу сказать, что это самое подробное объяснение в сети:
Столбцы и строки
Используя сетку, виджетам присваивается номер «столбца» и номер «строки»,что указывает на их относительное положение друг к другу. Поэтому все виджеты в одном и том же столбце будут выше или ниже друг друга, а в одном и том же ряду - слева или справа друг от друга.
Номера столбцов и строк должны бытьцелые числа, с первым столбцом и строкой, начинающимися с 0. Вы можете оставить пробелы в номерах столбцов и строк (например, столбцы 0, 1, 2, 10, 11, 12, 20, 21), что удобно, если вы планируете добавить большевиджеты в середине пользовательского интерфейса позднее.
Ширина каждого столбца (или высота каждой строки) зависит от ширины или высоты виджетов, содержащихся в столбце или строке.Это означает, что при создании эскиза вашего пользовательского интерфейса и разделении его на строки и столбцы вам не нужно беспокоиться о равной ширине каждого столбца или строки.
(Получено 21 ноября 2018 г. из https://tkdocs.com/tutorial/grid.html)
[Emphasis Mine]
Однако неясно, что происходит с виджетами в том же столбце и строка . Похоже, что grid(**options)
также не может указывать, где в ячейке размещаются конфликтующие виджеты, хотя sticky
может иметь некоторое взаимодействие.
Размещает ли менеджер по компоновке grid
в Tkinter «сталкивающиеся» виджеты в объявленном порядке, слева направо и сверху вниз? Как ведет себя ячейка, содержащая несколько виджетов, когда корневой виджет (обычно фрейм или окно)) изменен ли размер? Существует ли механизм для переопределения поведения по умолчанию при возникновении коллизий?
РЕДАКТИРОВАТЬ: код, который я использовал для проверки поведения. Кажется, отображается только последний метка один.
import tkinter, random
root = tkinter.Tk()
root.title('Widget Collision Test - Grid Layout')
labels = []
for i in range(3):
labels.append(tkinter.Label(root, text=str(i+1)))
labels[i].grid(
row=0, column=0,
padx=50, pady=50,
sticky=random.choice('N W S E'.split()))
root.mainloop()