Код, который вы скопировали, работает, укладывая все страницы друг на друга, и предполагает, что все они имеют одинаковый размер. Это не совсем хороший дизайн, особенно если вы только изучаете tkinter.
Если вы хотите, чтобы каждая страница имела свой собственный размер, самое простое решение - это исключить использование grid
, когда страницы изначально создали, и вместо этого show_frame
удалите текущую страницу и добавьте новую страницу.
Сначала создайте атрибут для хранения текущей страницы, чтобы его можно было удалить, и удалите вызов для grid
внутри L oop в __init__
. Кроме того, поскольку мы не будем полагаться на размещение страниц друг над другом, мы можем удалить команды для настройки сетки.
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
container = Frame(self)
container.pack(side='top', fill='both', expand=True)
self.current_frame = None
self.frames = {}
for F in (StartPage, New_Card_Page):
frame = F(container, self)
self.frames[F] = frame
self.show_frame(StartPage)
Далее измените show_frame
, чтобы скрыть текущую страницу и показать новую страницу. Поскольку мы больше не накладываем друг на друга виджеты, pack
является более простым выбором, чем grid
:
def show_frame(self, cont):
if self.current_frame is not None:
self.current_frame.pack_forget()
self.current_frame = self.frames[cont]
self.current_frame.pack(fill="both", expand=True)
Наконец, удалите вызов geometry
в конце вашего кода. , поскольку это заставляет окно к определенному c размеру.
С этими изменениями каждая страница приведет к изменению размера окна в соответствии с текущей страницей.