Tkinter и «sticky» и «rowconfigure» не заполняют пустое пространство - PullRequest
1 голос
/ 01 мая 2020

У меня есть 2 кадра внутри root, которые называются "header_frame" и "activity_frame", оба находятся в одном столбце, который равен "column = 0". Я хочу, чтобы размеры обоих фреймов соответствовали его родительскому элементу root, заполняя все пустое пространство следующим образом:

expected layout

Я перепробовал все возможности конфигурации сетки, включая настройку 'rowconfigure' на 'root', установите action_frame так, чтобы он придерживался "North", который является header_frame, последнее, но не менее важное. Я также пытался прикрепить header_frame к югу, что является результатом, которого я не хочу, потому что эти кадры имеют одинаковый размер (Я надеюсь, что header_frame имеет атрибут 'maxsize', но, к сожалению, его не было). вот код, который я пробовал:

self.root = root
self.column = ""
self.search = ""
self.root.minsize(500,480)
self.comboboxValue = None
self.root.title("CUCI (CSV Unique Column Identifier)")
self.root.configure(background="powder blue")
self.root.grid_columnconfigure(0,weight=1)
self.root.grid_rowconfigure(0,weight=1)
self.root.grid_rowconfigure(1,weight=1)

#header frame
self.header_frame = tk.Frame(self.root)
self.header_frame.grid(row=0, column=0,sticky="NEW")
self.header_frame.grid_columnconfigure(0,weight=1)
self.header_frame.grid_rowconfigure(0,weight=1)
self.header_frame.configure(background="grey")

#activity Frame
self.activity_frame = tk.Frame(self.root)
self.activity_frame.grid(row=1, column=0,sticky="NEWS")
self.activity_frame.grid_columnconfigure(0,weight=1)
self.activity_frame.grid_rowconfigure(0,weight=1)
self.activity_frame.configure(background="grey",pady=1)

Вот результат компоновки из моего кода, который я не ожидаю: enter image description here

Точка в том, что я хочу заполнить эти пустые места с помощью action_frame, чтобы они были прикреплены к 'header_frame'. Пожалуйста, я не буду использовать sh для использования pack (self.activity_frame.pack (fill = tk.X)). Я просто хочу использовать сетку, потому что она проста в использовании

1 Ответ

1 голос
/ 01 мая 2020

Причина разрыва заключается в том, что у вас нет рамки заголовка, придерживающейся нижней части отведенного ему пространства. Если вы измените атрибут sticky для заголовка на «nsew», вы увидите, что заголовок заполняет дополнительное пространство.

self.header_frame.grid(row=0, column=0,sticky="nesw")

Я предполагаю, что вы не хотите, чтобы кадр заголовка быть таким высоким Если это так, присвойте строке 0 вес 0 вместо 1. Таким образом, все дополнительное нераспределенное пространство будет отдано строке 1.

self.root.grid_rowconfigure(0,weight=0)

После этого и после добавления пары других виджеты для имитации вашего экрана, вот как это выглядит:

Screenshot

...