Pré-requisitos: GUI Python - tkinter

Às vezes, precisamos criar um aplicativo com várias caixas de diálogo pop-up, ou seja, quadros de página. Aqui está um processo passo a passo para criar vários quadros de página Tkinter e vinculá-los! Isso pode ser usado como um padrão para aplicativos GUI python mais complexos, como a criação de interfaces para laboratórios virtuais para experimentos, salas de aula, etc.

Aqui estão as etapas:

  • Crie três páginas diferentes. Aqui temos três páginas diferentes, a página inicial como a página inicial, a página um e a página dois.
  • Crie um contêiner para cada quadro de página.
  • Temos quatro classes. A primeira é a classe tkinterApp, onde inicializamos os três quadros e definimos uma função show_frame que é chamada toda vez que o usuário clica em um botão.
  • O StartPage é simples com dois botões para ir para a Página 1 e a Página 2.
  • A página 1 tem dois botões, um para a página 2 e outro para retornar à página inicial.
  • A página 2 também possui dois botões, um para a página 1 e outros para retornar ao StartPage.
  • Esta é uma aplicação simplista de navegação entre frames do Tkinter.
  • Isso pode ser usado como um padrão para aplicativos mais complexos e vários recursos podem ser adicionados.

O aplicativo começa com o StartPage como a primeira página, conforme mostrado na classe tkinterApp. Aqui no StartApp, existem dois botões. Clicar em um botão leva você para a respectiva Página. Você pode adicionar imagens e gráficos a essas páginas e adicionar funcionalidades complexas. As páginas também possuem dois botões. Cada vez que um botão é pressionado, show_frame é chamado, o que exibe a respectiva Página.

Abaixo está a implementação.



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()