В Tkinter можно организовать несколько страниц с помощью Frame или Toplevel, и переключаться между ними, скрывая одну страницу и показывая другую. Один из способов сделать это — использовать несколько виджетов Frame, которые будут представлять разные «страницы». Вот пример, как это можно сделать:
from tkinter import *
# Функция для показа страницы
def show_frame(frame):
frame.tkraise()
# Создаем основное окно
top = Tk()
top.geometry("700x700")
# Создаем контейнер для страниц (фреймов)
container = Frame(top)
container.pack(fill="both", expand=True)
# Определяем страницы (фреймы)
frame1 = Frame(container)
frame2 = Frame(container)
# Располагаем все страницы в одном месте друг на друга
for frame in (frame1, frame2):
frame.grid(row=0, column=0, sticky='nsew')
# Добавляем элементы на первую страницу
label1 = Label(frame1, text="Это страница 1")
label1.pack(pady=10)
button1 = Button(frame1, text="Перейти на страницу 2", command=lambda: show_frame(frame2))
button1.pack()
# Добавляем элементы на вторую страницу
label2 = Label(frame2, text="Это страница 2")
label2.pack(pady=10)
button2 = Button(frame2, text="Вернуться на страницу 1", command=lambda: show_frame(frame1))
button2.pack()
# Показываем первую страницу
show_frame(frame1)
top.mainloop()
В этом примере:
Каждая страница — это отдельный Frame.
Мы используем метод tkraise(), чтобы поднять нужную страницу на передний план.
container содержит все страницы, и каждая страница размещена в одной и той же позиции с помощью grid().
Тебе ткинтер не нужен. Он уродлив. Делай сразу все на qml. Да и сама идея писать на питоне с tk сомнительна, так как tk имеет встроенный скриптовый язык tcl
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
if __name__ == "__main__":
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load(QUrl("main.qml"))
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec_())