Растяжение фреймов с использованием сетки в Python Tkinter - PullRequest
5 голосов
/ 16 марта 2012

Я пытаюсь заставить растягиваться работать с использованием Python 2.6.7 с Tkinter. Я ожидаю, что приведенный ниже код растянет первую кнопку до ширины второй, но обе кнопки имеют такую ​​ширину, которая должна соответствовать их тексту.

#!/usr/bin/python
from Tkinter import *

win = Frame()
win.grid(sticky=N+S+E+W)

inner_a = Frame(win)
inner_a.grid(row=0, column=0, sticky=N+E+W)
inner_b = Frame(win)
inner_b.grid(row=1, column=0, sticky=S+E+W)

Button(inner_a, text='1').grid(row=0, column=0, sticky=E+W)
Button(inner_b, text='Some long text').grid(row=0, column=0, sticky=E+W)

win.mainloop()

Насколько я понимаю, один столбец в win будет расширяться до ширины самой большой вещи, которую он содержит, то есть до ширины inner_b, а затем до ширины inner_a и, следовательно, первой кнопки, будет кнопкой второй кнопки.

На самом деле, что происходит ниже; первая кнопка достаточно широка, чтобы содержать «1», а не такая широкая, как вторая кнопка.

Screen shot: two buttons stacked on top of each other, the first has the single character

Что мне нужно сделать, чтобы первая кнопка увеличила размер второй?

1 Ответ

9 голосов
/ 16 марта 2012

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

Еще одна вещь, которую вам нужно сделать, это придать вес вашей колонке. В вашем коде происходит то, что виджет расширяется, чтобы заполнить столбец, но столбец не расширяется, чтобы заполнить мастер. Если вы даете ему вес 1, это будет. Вы должны сделать что-то вроде inner_a.columnconfigure(1, weight=1), а затем сделать то же самое для inner_b.

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