Как разместить виджеты на основе позиции другого виджета? - PullRequest
0 голосов
/ 28 июня 2019

Я хочу разместить свои виджеты динамически.Если я изменю положение одного виджета, все остальные виджеты должны быть перемещены так же.

Я пробовал что-то подобное, но «Тест» не отображается правильно, как я хочу.Он находится слева от моего виджета ввода, но я хочу, чтобы + 20px был добавлен в TypEntry.

canvas = tk.Canvas(root, height=500, width=300)
canvas.pack()

TypEntry = tk.Entry(root, width=10)
TypEntry.pack()
TypEntry.place(x=xPosForHeader+50, y=yPosForHeader)

ArtikelLabel = tk.Label(root, text="Test")
ArtikelLabel.pack()
ArtikelLabel.place(x=TypEntry.winfo_x()+20, y=yPosForHeader)

1 Ответ

2 голосов
/ 28 июня 2019

Немного неясно, что именно вы спрашиваете, потому что tkinter предоставляет несколько способов размещения виджетов относительно других виджетов.

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

Если вы прочтете документацию для place, вы увидите, что есть варианты специально для относительного размещения. Эти опции включают relx, rely, relwidth и relheight.

Используя ваш код, это выглядело бы так:

ArtikelLabel.place(in_=TypEntry, relx=1.0, x=20, rely=0)

В этом примере параметры имеют следующий эффект:

  • in_ указывает виджет, к которому относится этот виджет

  • relx - это значение с плавающей запятой, где 0 означает левый край другого виджета, а 1.0 означает правый край. Используя 1.0, мы говорим, что метка должна быть расположена относительно правого края виджета ввода.

  • x - абсолютное число. При использовании в сочетании с relx значения суммируются. Таким образом, relx=1.0, x=20 означает 20 пикселей справа от правого края

  • rely указывает, что виджет должен быть выровнен по верхнему краю виджета.

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