Tkinter: проблема с заполнением всего кадра виджетом - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь создать три кадра: верхний, средний и нижний. Я успешно добавил виджеты в верхнюю и нижнюю рамки и сориентировал их так, как хотел.

Однако я просто пытаюсь добавить два виджета ввода в средний кадр, который будет охватывать всю ширину кадра / окна.

Из-за длины кода для всех виджеты в верхнем и нижнем кадрах, я просто собираюсь включить фрагмент кода для настройки моего окна и рамок:

root = Tk()
root.resizable(False, False)

top_frame = Frame(root)
middle_frame = Frame(root)
bottom_frame = Frame(root)

# I think this block is irrelavant to the question, but including it anyway just incase
rows = 0
while rows < 36:
    top_frame.rowconfigure(rows, weight=1)
    top_frame.columnconfigure(rows, weight=1)
    bottom_frame.rowconfigure(rows, weight=1)
    bottom_frame.columnconfigure(rows, weight=1)
    rows += 1

top_frame.grid(row=0, column=0)
middle_frame.grid(row=1, column=0)
bottom_frame.grid(row=2, column=0)

Вот код, который я использую для двух виджетов ввода :

entry_1 = Entry(middle_frame)
entry_2 = Entry(middle_frame)
entry_1.grid(row=0, column=0, sticky=E+W)
entry_2.grid(row=1, column=0, sticky=E+W)

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

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

1 Ответ

2 голосов
/ 13 февраля 2020

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

Первый шаг - использовать параметр sticky в среднем окне:

middle_frame.grid(row=1, column=0, sticky="ew")

Далее вы не сказали grid, что делать с дополнительным пространством в окне root. Как правило, любой виджет, использующий grid для управления своими дочерними элементами, должен иметь хотя бы одну строку и один столбец с весом больше нуля.

Чтобы средний кадр занимал всю ширину в окне укажите столбец с ненулевым весом:

root.grid_columnconfigure(0, weight=1)

Та же проблема существует в средней рамке: вы не указываете grid, как обрабатывать дополнительное пространство. В соответствии с эмпирическим правилом нам нужно присвоить нулевому столбцу вес в среднем кадре:

middle_frame.grid_columnconfigure(0, weight=1)

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

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