PYTHON: как закрепить две метки сверху, используя tkinter - PullRequest
0 голосов
/ 11 октября 2018
import tkinter as tk

root = tk.Tk()
root.title("window")

yellow_header = tk.Label(root, text = 'Header', bg = 'light yellow')
yellow_header.pack(side = tk.TOP, anchor = tk.N, expand = 1, fill = tk.X)

yellow_header2 = tk.Label(root, text = 'paragraph', bg = 'light yellow')
yellow_header2.pack(side = tk.TOP, anchor = tk.N, expand = 1, fill = tk.X)

root.mainloop()

Для приведенного выше кода я пытаюсь прикрепить обе эти метки к верхней части и непосредственно под другой.Хотя первая метка (yellow_header) привязывается к вершине, а вторая метка (yellow_header2) при раскрытии перемещается к центру.Как я могу это исправить?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Глядя на документы, которые я вижу:

Виджет Текст используется для отображения текста в несколько строк.

, и это, кажется, работает:

import tkinter as tk

root = tk.Tk()
root.title("window")

yellow_header = tk.Label(root, text = 'Header\nParagraph', bg = 'light yellow')
yellow_header.pack(side = tk.TOP, anchor = tk.N, expand = 1, fill = tk.X)

Это может быть немного специфично для ОС, и, возможно, правильный путь будет следующим:

import os
...
yellow_header = tk.Label(root, text = 'Header' + os.linesep + 'Paragraph', bg = 'light yellow')

При увеличении длины первой строки вторая по-прежнему остается в центре.

0 голосов
/ 11 октября 2018

Не используйте expand=1.Начиная с effbot :

Параметр expand указывает менеджеру назначать дополнительное пространство для поля виджета.Если родительский виджет сделан больше, чем необходимо для хранения всех упакованных виджетов, любое превышенное пространство будет распределено среди всех виджетов, для которых для опции expand установлено ненулевое значение.

При expand=1, когда вы увеличиваете окно, пространство распределяется между двумя метками.Поэтому, даже если вы только скажете им заполнить его в направлении X, им дается пространство в обоих направлениях.Вторая метка находится непосредственно под пространством, доступным для первой метки, которая составляет половину окна.

Я пытался объяснить и визуализировать разницу между expand и fill в этот ответ .

PS Вам тоже не нужно anchor=tk.N.Когда пространство, доступное для виджета, и размер виджета одинаковы, опция привязки не имеет значения.Кроме того, side=tk.TOP является значением по умолчанию, так что вы можете также опустить это, оставив вам только fill=tk.X.

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