Changement d'écran / transition d'écran avec Tkinter

Commutation d'écran avec Tkinter

Introduction de code super simple. Un autre article (ici) est devenu long à cause du code lié à OpenCV, je vais donc le résumer brièvement. Cela devrait fonctionner si l'oreiller est inclus.

code

main.py


# -*- coding: utf-8 -*-
import tkinter as tk
import PIL.Image, PIL.ImageTk

class App(tk.Tk):
    #incantation
    def __init__(self, *args, **kwargs):
        #incantation
        tk.Tk.__init__(self, *args, **kwargs)

        #Décidez du titre de la fenêtre
        self.title("Tkinter change page")

        #Déterminer la taille de la fenêtre
        self.geometry("800x600")

        #Rendre la grille de fenêtre 1x1
        #Si vous commentez ce processus, le placement changera.
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)
#-----------------------------------main_frame-----------------------------
        #Créer un cadre de page principal
        self.main_frame = tk.Frame()
        self.main_frame.grid(row=0, column=0, sticky="nsew")
        #Création d'étiquettes de titre
        self.titleLabel = tk.Label(self.main_frame, text="Main Page", font=('Helvetica', '35'))
        self.titleLabel.pack(anchor='center', expand=True)
        #Bouton pour passer à l'image 1
        self.changePageButton = tk.Button(self.main_frame, text="Go to frame1", command=lambda : self.changePage(self.frame1))
        self.changePageButton.pack()
#--------------------------------------------------------------------------
#-----------------------------------frame1---------------------------------
        #Créer une image de destination
        self.frame1 = tk.Frame()
        self.frame1.grid(row=0, column=0, sticky="nsew")
        #Création d'étiquettes de titre
        self.titleLabel = tk.Label(self.frame1, text="Frame 1", font=('Helvetica', '35'))
        self.titleLabel.pack(anchor='center', expand=True)
        #Bouton pour revenir de l'image 1 à l'image principale
        self.back_button = tk.Button(self.frame1, text="Back", command=lambda : self.changePage(self.main_frame))
        self.back_button.pack()
#--------------------------------------------------------------------------

        #main_Cadre d'affichage en haut
        self.main_frame.tkraise()

    def changePage(self, page):
        '''
Fonction de transition d'écran
        '''
        page.tkraise()

if __name__ == "__main__":
    app = App()
    app.mainloop()

Commentaire grossier

Le point est la commande tkraise. tkraise place l'image spécifiée au premier plan. Les cadres sont placés les uns sur les autres, et le cadre au dos est ramené à chaque pression sur le bouton. Les boutons sont super simples sans aucune décoration.

Illustré

Une telle image コメント 2020-01-26 202500.png

Explication détaillée

La plupart des choses sont écrites dans le commentaire dans le code, mais pour le moment,

Commencez par créer le cadre principal (main_frame) et le cadre de destination (frame1). Placez deux cadres aux coordonnées (0,0) en utilisant la méthode de la grille Il peut être empilé en utilisant la grille. Rien à dire sur l'étiquette de titre. Le widget bouton spécifie la fonction changePage dans la commande. La fonction changePage prend un nom de trame comme argument. Au fait, lors de la spécification d'une fonction qui prend un argument (self ne compte pas) dans la commande du widget bouton, commande = lambda: fonction Doit être.

fin

J'en ai fait un code assez court donc c'est facile à comprendre. Le plus court que j'aie jamais vu. Bien sûr, il existe un moyen d'afficher et de masquer la page à chaque fois sans utiliser tkraise, mais je pense que tkraise est le plus simple.

Recommended Posts

Changement d'écran / transition d'écran avec Tkinter
[Environnement de développement] Python avec Xcode [Avec transition d'écran]
MVC avec Tkinter
Devenez Père Noël avec Tkinter
Programmation avec Python et Tkinter
Introduction à Tkinter 2: Button
Travailler avec le tkinter et la souris
[Python] Créez un écran de spécification de chemin de fichier et de dossier avec tkinter
Créer une visionneuse d'images avec Tkinter
Exécuter Label avec tkinter [Python]
J'ai mesuré l'IMC avec tkinter
Écran divisé en 3 avec keyhac
Créer un défilement d'écran avec Pythonista + scene
Obtenez une capture d'écran Web avec python
Application GUI facile avec Tkinter Text
Async / await avec Kivy et tkinter
[Tkinter] Contrôler les threads avec l'objet Event
[Python] Création de plusieurs fenêtres avec Tkinter