Mandar um café pro programador

Pode me ajudar a transformar cafeína em código?

Botão de Checagem - A classe Checkbutton

Neste tutorial de GUI em Python, vamos estudar o widget de Checkbutton, os famosos botões de checagem, tipo on/off, de marcado ou não marcado:

Check Button em Python

Checkbutton em Python

Se você entendeu bem o conceito e uso dos botões de rádio (radiobutton), vai facilmente entender os checkbuttons.

Assim como os botões de rádio, os de check podem ser selecionados e deselecionado (espero que essa palavra exista). A diferença é que num mesmo grupo de botões de rádio, você pode deixar apenas um selecionado.

Já nos botões de check, você pode selecionar quantos quiser, até mesmo todos ou nenhum.
Para trabalharmos com botões de check, usamos a classe Checkbutton, do módulo tkinter também.

A grande diferença, na hora de programar, é que vamos usar um objeto da classe IntVar para cada botão de checagem. Nos botões de rádio, usávamos apenas um objeto IntVar para o grupo de botões, pois apenas um dele seria marcado...já nos de check, todos podem ser marcados, por isso cada botão tem seu IntVar.

Como usar Checkbutton em uma GUI em Python

Mas vamos deixar de papo teórico e partir para a prática.
Vamos criar um programinha com a seguinte cara:

Como usar botão de checagem em Python
Teremos dois frames:

  • frame_cima: o label 'Que tipo de música você gosta' e os 4 botões de check
  • frame_baixo: os dois botões


Criamos 4 objetos do tipo IntVar: checkvar1, checkvar2, ..., checkvar4, um para cada checkbutton.
Depois colocamos o valor 0 como argumento do método set da classe IntVar, para dizer que queremos que os check buttons iniciem zerados (sem estarem marcados).

Depois, vamos criar nossos widgets. Primeiro o label.
Depois, os 4 checkbuttons, através da classe Checkbutton, que recebe primeiro o container que vamos adicionar os botões (frame_cima), depois o texto que vai ao lado do check e o parâmetro variable, onde passamos o objeto do tipo IntVar responsável por lidar com o valor assinalado (0 para desmarcado ou 1 para marcado).

Empacotamos o label e os checkbuttons (usamos anchor='w' para alinhar a esquerda, west).
Depois criamos os botões Exibe e o Sair, onde o Exibe chama o método exibe().

Empacotamos os botões, depois os frames.
Agora vamos para o método exibe().

Ele vai exibir uma caixa de diálogo com uma string começada com 'Você curte: ' e vai adicionando 'MPB', 'Música clássica' e ou 'Metal' de acordo com o que for assinalado.

>
Exceto se você curtir Funk, se marcar essa opção vai aparecer a string 'Tá de sacanagem né?'

Para sabermos o valor que está nos objetos da IntVar, basta acessar o método get().
Se estiver assinalado, ele retorna 1. Se não estiver, retorna 0.

Veja como ficou o código de nosso programinha:

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)
  
  # Objetos IntVar dos botões
  self.checkvar1 = IntVar()
  self.checkvar2 = IntVar()
  self.checkvar3 = IntVar()
  self.checkvar4 = IntVar()
  
  # Setando valor 0 para aparecem desmarcados
  self.checkvar1.set(0)
  self.checkvar2.set(0)
  self.checkvar3.set(0)
  self.checkvar4.set(0)
  
  # Criando os check buttons e o label
  self.label = Label(self.frame_cima, text='Que tipo de música você gosta: ')
  self.checkbutton1 = Checkbutton(self.frame_cima, text='MPB', \
       variable = self.checkvar1)
  self.checkbutton2 = Checkbutton(self.frame_cima, text='Música clássica', \
       variable = self.checkvar2)
  self.checkbutton3 = Checkbutton(self.frame_cima, text='Metal', \
       variable = self.checkvar3)
  self.checkbutton4 = Checkbutton(self.frame_cima, text='Funk', \
       variable = self.checkvar4)
  
  # Empacotando o label e os check buttons
  self.label.pack(anchor = 'w')
  self.checkbutton1.pack(anchor = 'w')
  self.checkbutton2.pack(anchor = 'w')
  self.checkbutton3.pack(anchor = 'w')
  self.checkbutton4.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 os 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):
   self.texto = 'Você curte: \n'
   if self.checkvar1.get() == 1:
    self.texto += 'MPB\n'
   if self.checkvar2.get() == 1:
    self.texto += 'Música clássica\n'
   if self.checkvar3.get() == 1:
    self.texto += 'Metal\n'
   if self.checkvar4.get() == 1:
    self.texto = 'Tá de sacanagem né?'
   messagebox.showinfo('Seu gosto musical:', self.texto)

  
gui = MinhaGUI()

Quando usar Radiobutton ou Checkbuton

Você deve usar radiobutton quando quiser que o usuário selecione uma, e posso selecionar apenas uma, opção. Por exemplo:
Quando usar checkbutton

Não tem como você ter menos de 18 e entre 18 até 65 ao mesmo tempo. Nem tem como ter de 18 até 65 e mais de 65 ao mesmo tempo. Nesse caso, use sempre botões de rádio.

Agora se o usuário puder escolher mais de uma opção, como gosto musical, aí sim use checkbutton.

Um comentário:

  1. Como eu coloco uma barra de rolagem neste exemplo, se eu que colocar mais opções que a tela possa suportar?

    ResponderExcluir

Bora fazer evoluir o ensino da Programação no Brasil ?

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo