Распределение размеров менеджера геометрии сетки Tkinter (с закреплением) - PullRequest
8 голосов
/ 18 сентября 2009

Я что-то упускаю из-за того, как размеры распространяются в Tk. Попробуйте это:

from Tkinter import *

root = Tk()

frame1 = Frame(root, border=4, relief=RIDGE)
frame1.grid(sticky=E+W)
frame2 = Frame(root, border=4, relief=RIDGE)
frame2.grid(sticky=E+W)

label1 = Label(frame1, text='short', background='white')
label1.grid(sticky=E+W)
label2 = Label(frame2, text='quite a bit longer', background='white')
label2.grid(sticky=E+W)

root.mainloop()

label1 находится внутри frame1, а label2 находится внутри frame2. label1 выходит уже, чем label2, что видно на белом фоне. Но frame1 и frame2 имеют одинаковую ширину, что видно по их границам. Я думал, что липкость расширит label1 до той же ширины, что и его родитель.

Если я поместил label1 и label2 в одну и ту же рамку, то label1 получится шириной label2:

frame1 = Frame(root, border=4, relief=RIDGE)
frame1.grid(sticky=E+W)

label1 = Label(frame1, text='short', background='white')
label1.grid(sticky=E+W)
label2 = Label(frame1, text='quite a bit longer', background='white')
label2.grid(sticky=E+W)

Чего мне не хватает? В реальной жизни у меня есть несколько вложенных рамок, которые не расширяются, как хотелось бы.

Спасибо, Dan

Ответы [ 2 ]

9 голосов
/ 18 сентября 2009

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

Чтобы это исправить, присвойте столбцу вес. Любое положительное целое число будет делать в этом конкретном случае:

frame1.columnconfigure(0, weight=1)
frame2.columnconfigure(0, weight=1)

Для получения дополнительной информации о grid, с примерами в ruby, tcl, perl и python, см. страницу сетки на tkdocs.com

0 голосов
/ 26 июня 2018

Это решение со столбцами и фреймами работает, но для того, чтобы метки имели одинаковую ширину в сетке, вам не нужны заключающие фреймы. См. Пример ниже

from tkinter import *

root = Tk()

label1 = Label(root, text='short', bg='light green', relief=RIDGE)
label1.grid(sticky=E+W)
label2 = Label(root, text='quite a bit longer', bg='light green', relief=RIDGE)
label2.grid(sticky=E+W)

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