Voraussetzungen: Python GUI - tkinter

Manchmal kommt es vor, dass wir eine Anwendung mit mehreren Popup-Dialogfeldern erstellen müssen, z. B. Seitenrahmen. Hier ist ein schrittweiser Prozess, um mehrere Tkinter-Seitenrahmen zu erstellen und zu verknüpfen! Dies kann als Boilerplate für komplexere Python-GUI-Anwendungen wie das Erstellen von Schnittstellen für virtuelle Laboratorien für Experimente, Klassenzimmer usw. verwendet werden.

Hier sind die Schritte:

  • Erstellen Sie drei verschiedene Seiten. Hier haben wir drei verschiedene Seiten: Die Startseite als Startseite, Seite eins und Seite zwei.
  • Erstellen Sie einen Container für jeden Seitenrahmen.
  • Wir haben vier Klassen. Das erste ist die tkinterApp-Klasse, in der wir die drei Frames initialisiert und eine Funktion show_frame definiert haben, die jedes Mal aufgerufen wird, wenn der Benutzer auf eine Schaltfläche klickt.
  • Die Startseite ist einfach mit zwei Schaltflächen, um zu Seite 1 und Seite 2 zu gelangen.
  • Seite 1 verfügt über zwei Schaltflächen, eine für Seite 2 und eine für die Rückkehr zur Startseite.
  • Seite 2 verfügt außerdem über zwei Schaltflächen, eine für Seite 1 und andere, um zu StartPage zurückzukehren.
  • Dies ist eine vereinfachte Anwendung zum Navigieren zwischen Tkinter-Frames.
  • Dies kann als Boilerplate für komplexere Anwendungen verwendet werden, und es können verschiedene Funktionen hinzugefügt werden.

Die App startet mit der Startseite als erste Seite, wie in der Klasse tkinterApp gezeigt. Hier in StartApp gibt es zwei Schaltflächen. Durch Klicken auf eine Schaltfläche gelangen Sie zur jeweiligen Seite. Sie können diesen Seiten Bilder und Grafiken hinzufügen und komplexe Funktionen hinzufügen. Die Seiten haben auch zwei Schaltflächen. Bei jedem Drücken einer Taste wird show_frame aufgerufen, wodurch die jeweilige Seite angezeigt wird.

Unten ist die Implementierung.



import tkinter as tk 
from tkinter import ttk 
   
  
LARGEFONT =("Verdana", 35) 
   
class tkinterApp(tk.Tk): 
      
    
    def __init__(self, *args, **kwargs):  
          
        
        tk.Tk.__init__(self, *args, **kwargs) 
          
        
        container = tk.Frame(self)   
        container.pack(side = "top", fill = "both", expand = True
   
        container.grid_rowconfigure(0, weight = 1) 
        container.grid_columnconfigure(0, weight = 1) 
   
        
        self.frames = {}   
   
        
        
        for F in (StartPage, Page1, Page2): 
   
            frame = F(container, self) 
   
            
            
            
            self.frames[F] = frame  
   
            frame.grid(row = 0, column = 0, sticky ="nsew") 
   
        self.show_frame(StartPage) 
   
    
    
    def show_frame(self, cont): 
        frame = self.frames[cont] 
        frame.tkraise() 
   
   
class StartPage(tk.Frame): 
    def __init__(self, parent, controller):  
        tk.Frame.__init__(self, parent) 
          
        
        label = ttk.Label(self, text ="Startpage", font = LARGEFONT) 
          
        
        
        label.grid(row = 0, column = 4, padx = 10, pady = 10
   
        button1 = ttk.Button(self, text ="Page 1", 
        command = lambda : controller.show_frame(Page1)) 
      
        
        
        button1.grid(row = 1, column = 1, padx = 10, pady = 10) 
   
        
        button2 = ttk.Button(self, text ="Page 2", 
        command = lambda : controller.show_frame(Page2)) 
      
        
        
        button2.grid(row = 2, column = 1, padx = 10, pady = 10) 
   
           
   
   
class Page1(tk.Frame): 
      
    def __init__(self, parent, controller): 
          
        tk.Frame.__init__(self, parent) 
        label = ttk.Label(self, text ="Page 1", font = LARGEFONT) 
        label.grid(row = 0, column = 4, padx = 10, pady = 10) 
   
        
        
        button1 = ttk.Button(self, text ="StartPage", 
                            command = lambda : controller.show_frame(StartPage)) 
      
        
        
        button1.grid(row = 1, column = 1, padx = 10, pady = 10) 
   
        
        
        button2 = ttk.Button(self, text ="Page 2", 
                            command = lambda : controller.show_frame(Page2)) 
      
        
        
        button2.grid(row = 2, column = 1, padx = 10, pady = 10) 
   
   
   
   
class Page2(tk.Frame):  
    def __init__(self, parent, controller): 
        tk.Frame.__init__(self, parent) 
        label = ttk.Label(self, text ="Page 2", font = LARGEFONT) 
        label.grid(row = 0, column = 4, padx = 10, pady = 10) 
   
        
        
        button1 = ttk.Button(self, text ="Page 1", 
                            command = lambda : controller.show_frame(Page1)) 
      
        
        
        button1.grid(row = 1, column = 1, padx = 10, pady = 10) 
   
        
        
        button2 = ttk.Button(self, text ="Startpage", 
                            command = lambda : controller.show_frame(StartPage)) 
      
        
        
        button2.grid(row = 2, column = 1, padx = 10, pady = 10) 
   
   
app = tkinterApp() 
app.mainloop()