
Checkbutton em Python
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:

- 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:
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.
Como eu coloco uma barra de rolagem neste exemplo, se eu que colocar mais opções que a tela possa suportar?
ResponderExcluir