Enviar um café pro programador

Frame em Python - Organizando os widgets

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:

Programação gráfica (GUI) em Python


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:
Como criar aplicativos em Python

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:

Curso de Python online grátis para download


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:
Como desenhar em Python

Note que dessa vez criamos duas janelas, então quando rodamos o script, aparecem duas janelas!

Um comentário: