Enviar um café pro programador

Botão de Rádio: RadioButton e IntVar

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:
Radio Button em Python


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:


  1. O container onde o botão de rádio vai (geralmente um frame)
  2. text - variável que armazena a string que vai aparecer ao lado do botão de rádio
  3. variable - nome da variável, que é um objeto da classe tipo IntVar
  4. 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':
Como fazer um radio button em Python

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

Um comentário:

  1. estou aqui no ano de 2021,tentando criar um projeto de iniciante usando a ferramenta dos radiobuttons no python,já usei anteriormente em HTML mas percebi que são coisas totalmente diferentes,será que alguem poderia me ajudar?

    ResponderExcluir