Neste tutorial de
GUI em Python, vamos aprender como criar os
radio buttons, aqueles botões de rádio, onde escolhemos apenas uma opção dentre várias:
Ler este conteúdo em PDF:
Apostila Python Progressivo
Botões de Rádio: Radio Button
Botões de rádio são aquelas opções, que aparecem em grupo, para você poder marcar apenas uma alternativa. Quando você marca uma opção, automaticamente as outras estarão desmarcadas.
Ou seja, dizemos que um botão de rádio é mutuamente exclusivo: só pode marcar uma opção e apenas uma, nada mais nem nada menos que uma.
Eles são bem úteis quando o programa deseja saber o que o usuário quer fazer, deixando ele escolher apenas uma opção.
RadioButton - Como usar em Python
Para criarmos um grupo de
radio buttons em Python, devemos fazer duas coisas:
Criar os botões, onde cada um é objeto da classe
Radiobutton
Um objeto da classe
IntVar, que vai armazenar o valor do botão selecionado
Para criar um objeto da classe
Radiobutton, passamos como argumento:
- O container onde o botão de rádio vai (geralmente um frame)
- text - variável que armazena a string que vai aparecer ao lado do botão de rádio
- variable - nome da variável, que é um objeto da classe tipo IntVar
- value - valor inteiro, onde cada opção deve corresponder a um número diferente
Pegamos o valor selecionado através do método get() de objetos da classe IntVar.
Vamos ver um exemplo real, funcionando e acontecendo, para entender melhor ?
Exemplo de uso de um Radiobutton
Vamos criar um programa que vai ter a seguinte 'cara':
Primeiro, criamos nossa
janela_principal, depois dois frames:
frame_cima e o
frame_baixo.
No frame de cima, vamos colocar o label e os botões de rádio.
No frame de baixo, vão os botões
Exibe e
Sair.
Depois, criamos o objeto
radio_valor, da classe
IntVar, que vai armazenar o valor do botão de rádio selecionado. Inicialmente setamos ele como 1, para aparecer marcado a opção de valor 1.
Em seguida criamos o label "Qual melhor curso?".
Depois, os três
Radiobutton. Vamos colocar todos no
frame_cima, todos vão usar a variável
radio_valor e cada um tem um número inteiro diferente, de 1 até 3, para sabermos qual valor foi marcado.
Empacotamos o label e os botões no frame de cima.
Depois criamos os botões
Exibe e o
Sair. O exibe pega o valor assinalado (que está no método get() do objeto
radio_valor da classe
VarInt) e exibe a opção que escolhemos.
Veja como ficou nosso código Python:
from tkinter import *
from tkinter import messagebox
class MinhaGUI:
def __init__(self):
# Cria janela principal
self.janela_principal = Tk()
# Cria dois frames
self.frame_cima = Frame(self.janela_principal)
self.frame_baixo = Frame(self.janela_principal)
# Objeto IntVar dos botões
self.radio_valor = IntVar()
self.radio_valor.set(1) # Para a primeira opção ficar marcada
# Criando os radio buttons e o label
self.label = Label(self.frame_cima, text='Qual o melhor curso?')
self.python = Radiobutton(self.frame_cima, text='Python Progressivo', \
variable = self.radio_valor, value=1)
self.java = Radiobutton(self.frame_cima, text='Java Progressivo', \
variable = self.radio_valor, value=2)
self.c = Radiobutton(self.frame_cima, text='C Progressivo', \
variable = self.radio_valor, value=3)
# Empacotando o label e os radio buttons
self.label.pack(anchor = 'w')
self.python.pack(anchor = 'w')
self.java.pack(anchor = 'w')
self.c.pack(anchor = 'w')
# Criando os botões
self.botao = Button(self.frame_baixo, text='Exibe', command=self.exibe)
self.botao_sair = Button(self.frame_baixo, text='Sair', command=self.janela_principal.quit)
# Empacotando botões
self.botao.pack(side='left')
self.botao_sair.pack(side='left')
# Empacotando os frames na janela principal
self.frame_cima.pack()
self.frame_baixo.pack()
# Rodando
mainloop()
def exibe(self):
nome = str(self.radio_valor.get())
messagebox.showinfo('Resposta','Você escolheu a opçao ' + nome)
gui = MinhaGUI()
Chamando Métodos sem Botão
Se você puxar pela memória, vai se lembrar que muitas vezes nem precisar clicar em um botão, para o programa tomar alguma ação, basta selecionar um dos botões de rádio e algo já acontece.
Para fazer isso, basta adicionar o parâmetro
command ao criar um objeto da classe
Radiobutton com o nome do método que você deseja que seja executado.
Veja como fica nosso programa sem o uso de botões:
from tkinter import *
from tkinter import messagebox
class MinhaGUI:
def __init__(self):
# Cria janela principal
self.janela_principal = Tk()
# Criando o frame
self.frame_cima = Frame(self.janela_principal)
# Objeto IntVar dos botões
self.radio_valor = IntVar()
self.radio_valor.set(1) # Para a primeira opção ficar marcada
# Criando os radio buttons e o label
self.label = Label(self.frame_cima, text='Qual o melhor curso?')
self.python = Radiobutton(self.frame_cima, text='Python Progressivo', \
variable = self.radio_valor, value=1, command=self.exibe)
self.java = Radiobutton(self.frame_cima, text='Java Progressivo', \
variable = self.radio_valor, value=2, command=self.exibe)
self.c = Radiobutton(self.frame_cima, text='C Progressivo', \
variable = self.radio_valor, value=3, command=self.exibe)
# Empacotando o label e os radio buttons
self.label.pack(anchor = 'w')
self.python.pack(anchor = 'w')
self.java.pack(anchor = 'w')
self.c.pack(anchor = 'w')
# Empacotando o frame na janela principal
self.frame_cima.pack()
# Rodando
mainloop()
def exibe(self):
nome = str(self.radio_valor.get())
messagebox.showinfo('Resposta','Você escolheu a opçao ' + nome)
gui = MinhaGUI()