Neste tutorial de Python, vamos aprender o que são os Frames, para que servem e como usar, em programação gráfica (GUI).
Acesse esse conteúdo em PDF:
Apostila Python Progresivo
Frames em Python
Um
frame, em programação GUI, nada mais é que uma espécie de 'container', cujo propósito principal é armazenar e agrupar outros
widgets.
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!