Почему опция 'ipady' в методе tkinter.grid () добавляет только пространство под виджетом? - PullRequest
0 голосов
/ 19 января 2019

Ниже приведен код для отображения проблемы. Label1 показывает, что мне нужно использовать pady для смещения Label1 на 10 пикселей. Label2 показывает эффект по умолчанию ipady. Почему ipady не оставляет места над и под виджетами? Как заставить ipady делать то, что предполагается делать без использования pady? Спасибо.

Цитирование Документация tcl :

-пая сумма

Количество указывает, сколько вертикальных внутренних отступов нужно оставить сверху и снизу ведомого (ых). Это пространство добавлено внутри раба (ов). Сумма по умолчанию равна 0.

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()

s = ttk.Style()
s.configure('one.TFrame', background='light blue', relief='raised',borderwidth=10)
s.configure('two.TFrame', background='light green', relief='sunken', borderwidth=10)

frame1 = ttk.Frame(root,style='one.TFrame')
frame1.grid(row=0, column=0, sticky='nsew', ipady=10,)

label1 = ttk.Label(frame1, text='Label1')
label1.grid(sticky='nsew',padx=10, pady=10,)

frame2 = ttk.Frame(frame1,style='two.TFrame')
frame2.grid(row=1, column=1, sticky='nsew', ipady=50,)

label2 = ttk.Label(frame2, text='Label2')
label2.grid()

1 Ответ

0 голосов
/ 19 января 2019

Я не думаю, что ipady вполне делает то, о чем вы думаете. Следует признать, что документация немного неясна по этому вопросу. Это не добавляет эквивалент внутреннего поля. Вместо этого он просто добавляет столько пикселей к высоте виджета, и пиксели добавляются на внутренней стороне границы, а не на внешней стороне. Он не блокирует использование этих пикселей.

Если ваш кадр обычно имеет высоту 20 пикселей, с ipady=50, ваш виджет теперь будет иметь высоту 120 пикселей (50 * 2 + 20). Любые виджеты, добавленные внутри этого фрейма, могут использовать все пространство внутри фрейма. Таким образом, когда вы используете grid для размещения чего-либо в нулевой строке, оно все равно будет отображаться в самой верхней части кадра, чуть ниже границы.

Это именно то, что я вижу с вашим кодом. На моей машине frame2 без ipady=50 в итоге достигает 20 пикселей в высоту. Когда я добавляю ipady=50, рамка становится 120 пикселей в высоту. Метка появляется в самом верху рамки, поскольку она была помещена в нулевую строку.

TL; DR: не думайте о том, что ipady говорит "мне нужно так много внутреннего поля", а скорее "мне нужно гораздо больше дополнительного пространства внутри".

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