Acesse esse conteúdo em PDF: Apostila Python Progresivo
Frames em Python
Na barra do seu navegador, por exemplo, lá em cima, tem um frame com as várias opções de menu (Editar, Exibir, Ajuda etc).
Logo abaixo, deve ter outro frame, que agrupa vários botões: Página inicial, Parar, Atualizar, Voltar, Ir pra frente etc.
Ou seja, frame é uma 'região' em sua aplicação gráfica, que você vai colocar uma porção de outras coisas. É um widget que serve pra armazenar outros widgets.
O normal é colocar vários widgets num frame, e organizar eles ali dentro (cores, disposição, eventos etc). Depois, cria outro frame pra exibir na mesma janela, mas com outros widgets, com sua própria maneira de arranjo.
Abaixo, dois frames, lado a lado:
Note que, internamente, cada um tem seu arranjo (botões, disposições, cores, alinhamentos etc)
Como usar Frames em Python
Vamos fazer uma aplicação que vai exibir dois frames.Em cada um dos frames, vais colocar um Label, com um texto simples em cada um.
Primeiro, damos um import em tudo (*) do módulo tkinter.
Nossa classe que vai criar o programinha, se chama MinhaGUI.
Primeiro, instanciamos o objeto da Tk(), que é nossa janela principal.
Depois, vamos criar dois frames: o frame_cima e o frame_baixo, através da classe Frame(), que tem que recebe como argumento um objeto do tipo Tk(), no nosso caso é o objeto janela_principal, que é onde os frames estarão localizados (janela mãe).
A seguir, criamos dois labels, o label1 e o label2, e passamos os frames criados como argumento, um label para cada frame.
Damos o pack() pra posicionar os labels nos respectivos frames.
E por fim, damos o pack() para posicionar os frames (sim, frames também precisam ser posicionados nas janelas).
Depois é só chamar a função mainloop() que vai fazer sua aplicação rodar bonitinha.
Código Python:
from tkinter import * class MinhaGUI: def __init__(self): # Criando a janela principal self.janela_principal = Tk() # Criando os frames self.frame_cima = Frame(self.janela_principal) self.frame_baixo = Frame(self.janela_principal) # Criando os labels self.label1 = Label(self.frame_cima, text='To no frame de cima!') self.label2 = Label(self.frame_baixo, text='To no frame de baixo!') # Posicionando os labels nos frames self.label1.pack(side='top') self.label2.pack(side='top') # Posicionando o frame self.frame_cima.pack() self.frame_baixo.pack() # Fazer o Tkinter exibir o looping da janela mainloop() minha_gui = MinhaGUI()
Resultado:
Parâmetros da Frame
No exemplo anterior, passamos apenas uma informação ao criar um objeto do tipo Frame, que foi sua janela mestre. É o único parâmetro obrigatório, é o master.Existem alguns outros, como o bg, (pode usar background também, o tkinter entende ambos) que define a cor de fundo do frame.
O parâmetro height define a altura e o width a largura, em pixels, de cada frame.
Por exemplo, o código Python a seguir:
from tkinter import * class MinhaGUI: def __init__(self): # Criando a janela principal self.janela_principal = Tk() # Criando os frames self.frame_cima = Frame(self.janela_principal, bg="white", height=70, width=400) self.frame_baixo = Frame(self.janela_principal, bg='red', height=70, width=400) # Posicionando o frame self.frame_cima.pack() self.frame_baixo.pack() # Fazer o Tkinter exibir o looping da janela mainloop() minha_gui = MinhaGUI()
Cria a seguinte aplicação:
Se passar o argumento side="left" nas chamadas da pack(), essas duas faixas vão aparecer lado a lado ao invés de uma em cima da outra.
Exercício de Python
Busque na internet a figura da bandeira da França e da Holanda.Código Python:
from tkinter import * class MinhaGUI: def __init__(self): # Criando as janelas self.janela1 = Tk() self.janela2 = Tk() # Bandeira da França self.frame1 = Frame(self.janela1, bg="blue", height=200, width=80) self.frame2 = Frame(self.janela1, bg='white', height=200, width=80) self.frame3 = Frame(self.janela1, bg='red', height=200, width=80) self.frame1.pack(side="left") self.frame2.pack(side="left") self.frame3.pack(side="left") # Bandeira da Holanda self.fram1 = Frame(self.janela2, bg="red", height=80, width=200) self.fram2 = Frame(self.janela2, bg='white', height=80, width=200) self.fram3 = Frame(self.janela2, bg='blue', height=80, width=200) self.fram1.pack(side="top") self.fram2.pack(side="top") self.fram3.pack(side="top") # Fazer o Tkinter exibir o looping da janela mainloop() minha_gui = MinhaGUI()
Resultado:
Note que dessa vez criamos duas janelas, então quando rodamos o script, aparecem duas janelas!
Melhor explicação que encontrei. Parabéns pelo ótimo trabalho.
ResponderExcluir