Как работает менеджер компоновки сетки Tkinter с одинаковыми строками и столбцами? - PullRequest
0 голосов
/ 21 ноября 2018

Я просматриваю документацию по 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()

1 Ответ

0 голосов
/ 21 ноября 2018

Размещает ли менеджер компоновки сетки Tkinter «сталкивающиеся» виджеты в объявленном порядке, слева направо и сверху вниз?

Он не размещает виджеты в одной ячейке относительно друг друга.Фактически они накладываются друг на друга, при этом виджет с более высоким порядком размещения может скрывать виджеты с более низким порядком размещения.

Как ведет себя ячейка, содержащая несколько виджетов, когда корневой виджет (обычно размер кадра или окна) изменяется?

Тот факт, что в одной ячейке может быть два виджета, никак не влияет на поведение изменения размера.Все виджеты настраиваются в соответствии с обычными правилами менеджера сетки.

Существует ли механизм для переопределения поведения по умолчанию при возникновении коллизий?

Нет.Если вы хотите управлять несколькими виджетами в одной ячейке сетки, вы должны поместить эти виджеты во фрейм, а затем поместить этот единственный кадр в ячейку сетки.Это дает вам полный контроль над виджетами относительно друг друга в этом кадре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...