Использование place
является корнем проблемы, но реальная проблема заключается в комбинации трех сделанных вами вариантов:
- , которые вы используете
pack
на кнопках вStartTest
но не на ярлыке, - когда вы добавляете
StartTest
в корневое окно, вы не говорите ему заполнить окно, - вы создаете ярлык "Welcome"перед созданием кнопок, чтобы они появлялись за кнопками.
Чистый эффект заключается в том, что StartTest
достаточно большой, чтобы поместиться в кнопки, а кнопки находятся на верхней части метки.,Ярлык есть, но из-за всех других вариантов, которые вы сделали, его трудно увидеть.
Это можно проиллюстрировать, переместив ярлык приветствия в верхней части кнопок.Измените __init__
так, чтобы он в последний раз создавал метку:
class StartTest(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master, background="bisque")
tk.Button(self, text="Open page one",
command=lambda: master.switch_frame(PageOne)).pack()
tk.Button(self, text="Open page two",
command=lambda: master.switch_frame(PageTwo)).pack()
tk.Label(self, text="Welcome!, blah blah blah blah", font=title_font, bg="white", fg="#004d99").place(x=30, y=20)
Вот так будет выглядеть ваше окно (я уменьшил размер окна до 300x200, чтобы изображение было небольшим):

Следующая часть проблемы состоит в том, что рамки не заполняют окно.Это можно легко проиллюстрировать, придав вашему StartTest
уникальный цвет, чтобы он выделялся.
Измените функцию __init__
, чтобы она запускалась следующим образом (обратите внимание на использование цвета «красный» в третьей строке):
class StartTest(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master, background="red")
...
Когда вы запустите его, обратите внимание, что естьнигде на экране нет красного цвета.Это намек на то, что мы не можем видеть кадр.В этом случае это происходит из-за того, что он уменьшился, чтобы соответствовать кнопкам, а другие опции заставляют кнопки полностью заполнять фон (то есть: нет отступов, которые позволили бы фону просвечивать).
Чтобы решить эту проблемуВам нужно изменить способ звонка pack
внутри show_frame
.Вы должны убедиться, что рамка полностью заполняет окно.Сделайте это, изменив команду pack
, чтобы она выглядела следующим образом:
self._frame.pack(fill="both", expand=True)
Со всеми этими изменениями окно теперь выглядит так:

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