LINUX.ORG.RU

Многостраничное приложение

 


0

1

Создается страница

from tkinter import *
from tkinter import messagebox

top = Tk()
top.geometry("700x700")
top.mainloop()

Как скрыть и выдать другую страницу?

Пробовал delete() и remove()

Видимо как то по-другому.

Жду подсказку.



Последнее исправление: Zhbert (всего исправлений: 1)

Тебе так сложно забить свой вопрос в ЧатЖопатэ?

В 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().
iron ★★★★★
()
Ответ на: комментарий от iron

В тырнете как в Греции все есть:

from tkinter import * from tkinter import ttk

root = Tk() root.title(«METANIT.COM») root.geometry(«250x200»)

def click(): window = Tk() window.title(«Новое окно») window.geometry(«250x200») close_button = ttk.Button(window, text=«Закрыть окно», command=lambda: window.destroy()) close_button.pack(anchor=«center», expand=1)

open_button = ttk.Button(text=«Создать окно», command=click) open_button.pack(anchor=«center», expand=1)

root.mainloop()

Walking_by
() автор топика

Тебе ткинтер не нужен. Он уродлив. Делай сразу все на qml. Да и сама идея писать на питоне с tk сомнительна, так как tk имеет встроенный скриптовый язык tcl

main.qml

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: "Пример QML"

    SwipeView {
        id: swipeView
        anchors.fill: parent
        currentIndex: 0

        Page {
            Label {
                text: "Страница 1"
                anchors.centerIn: parent
            }
        }

        Page {
            Label {
                text: "Страница 2"
                anchors.centerIn: parent
            }
        }

        Page {
            Label {
                text: "Страница 3"
                anchors.centerIn: parent
            }
        }
    }

    PageIndicator {
        anchors.bottom: swipeView.bottom
        anchors.horizontalCenter: parent.horizontalCenter
        count: swipeView.count
        currentIndex: swipeView.currentIndex
    }
}

main.py:

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_())
rtxtxtrx ★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)