Почему размер рамки Tkinter изменяется при добавлении текстового поля? - PullRequest
6 голосов
/ 01 октября 2010

С этим кодом окно 500 на 500, что я и собираюсь сделать:

from tkinter import *
root = Tk()

frame = Frame(root, width=500, height=500)

frame.pack()
root.mainloop()

Когда я добавляю текстовое поле к фрейму, оно уменьшается до размера текстового поля:

from tkinter import *
root = Tk()

frame = Frame(root, width=500, height=500)

text = Text(frame, width=10, height=2) # THESE TWO
text.pack()                            # LINES HERE

frame.pack()
root.mainloop()

Почему это происходит и как я могу предотвратить это?

1 Ответ

6 голосов
/ 02 октября 2010

По умолчанию во фрейме включено «распространение пакета».Это означает, что упаковщик «вычисляет, насколько большим должен быть мастер, чтобы точно соответствовать потребностям его подчиненных, и устанавливает для этих размеров запрошенную ширину и высоту мастера» (цитата из официальных страниц руководства tcl / tk [ 1 ]).

В подавляющем большинстве случаев это абсолютно правильное поведение.Если вы не хотите этого, вы можете вызвать pack_propagate на главном устройстве и установить значение в false.Я думаю, что примерно через 20 лет программирования ТК мне нужно было сделать это всего полдюжины раз или около того, если это так.после того, как вы создали все виджеты.Это фактически делает то же самое, как если бы пользователь вручную изменил размер окна.Это работает только для окон верхнего уровня, вы не можете использовать wm_geometry для фрейма.

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