QUICK REFERENCE: CHECKBUTTON

O uso da chamada "múltipla-escolha" em provas escolares deve tornar o "widget" chamado CheckButton muito popular. A versão usual desse "control" é o CheckBox (visto na figura) em que, um clique sobre um "quadradinho", faz com que esse apareça "ticado". No caso do XO, temos um "botãozinho" em 3D que vai para baixo.

Um objeto CheckButton pode ser criado com, por exemplo:

self.cb = gtk.CheckButton("UM DADO TÍTULO")

Para adicionar esse objeto à tela do XO, numa dada posição, usamos normalmente um objeto Fixed (visto em aula anterior):

Os métodos de CheckButton são:

show()

hide()

destroy()

set_label(label)

Para trocar o título

get_label()

Retorna o título

set_active(bool)

Usamos True ou False para definir se o botãozinho aparece para baixo ou não. O uso desse método dispara um signal toggled - ver abaixo.

Como um botão, ele serve para disparar alguma ação. Como isso é feito? Já falamos isso quando tratamos do Button.

Colocamos a ação numa função que pode se chamar, por exemplo: talfunc. E existe um método que, a partir de algo que se fez com o botãozinho, dispara essa função. Esse "algo que se fez" é chamado de "signal". Os signals válidos são:

E o método é:

connect("signal", self.função, None)

No exercício dessa lição, o usuário tem a opção de selecionar nomes de jogadores que aparecerão numa lista (ScrolledWindow). Se ele de-selecionar alguém, todos se apagam na lista e voltam à situação inicial de não-selecionados.

DICA: Sempre que criamos lista usando ScrolledWindow é interessante separar a construção (e reconstrução) dessa janela numa função à parte. Lembramos que uma função em Python tem sempre como primeiro parâmetro a palavra "self", que não aparece como parâmetro nas "chamadas" à função. Se chamamos a função dentro da própria classe onde ela foi definida, usar o prefixo: self. Muitas vezes é interessante usar um objeto List para colocar as seleções e fazer uma varredura dela criando o String que vai dentro do Label que vai dentro da janela. Isso facilita exclusões.

Claro que o código a seguir, do exercício, tem que vir dentro de uma Classe etc. etc. como já mostramos.

#...
   def __init__(self):
       Activity.__init__(self)
       #Definindo o tamanho das letras
       gtk.settings_get_default().props.gtk_xft_dpi *= 2
       #Criando base para layout
       self.fix = gtk.Fixed()
       self.add(self.fix)
       self.fix.show()
       #Criando CheckButtons
       self.cb1 = gtk.CheckButton("Edson Arantes")
       self.fix.put(self.cb1, 200,200)
       self.cb1.show()
       self.cb1.connect("toggled",self.ticado1, None)
       #Criando um "flag"
       self.tic1 = False
       self.cb1.connect("clicked",self.pega1, None)
       #Outro CheckButton
       self.cb2 = gtk.CheckButton("Roberto Rivelino")
       self.fix.put(self.cb2, 200,300)
       self.cb2.show()
       self.cb2.connect("toggled",self.ticado2, None)
       #Criando outro "flag"
       self.tic2 = False
       self.cb2.connect("clicked",self.pega2, None)
       #Uma variável com o que vai aparecer na lista
       self.conteudo = "ESSES JOGARAM PELO SANTOS:\n"
       self.montajanela()
    
   def ticado1(self,widget,data=None):
       if(self.tic1==False:
           self.tic1 = True
       else:
           self.tic1 = False

   def ticado2(self,widget,data=None):
       if(self.tic2==False:
           self.tic2 = True
       else:
           self.tic2 = False

   def pega1(self,widget,data=None):
       if(self.tic1==True:
           self.conteudo = self.conteudo + "Edson Arantes\n"
       else:
           self.conteudo = "ESSES JOGARAM PELO SANTOS:\n"
           if(self.tic2==True:
               self.cb2.set_active(False)
       self.montajanela()

    def pega2(self,widget,data=None):
       if(self.tic2==True:
           self.conteudo = self.conteudo + "Roberto Rivelino\n"
       else:
           self.conteudo = "ESSES JOGARAM PELO SANTOS:\n"
           if(self.tic1==True:
               self.cb1.set_active(False)
       self.montajanela()

    def montajanela(self):
       self.lb = gtk.Label()
       self.lb.set_text(self.conteudo)
       #Criando ScrolledWindow
       self.sw = gtk.ScrolledWindow()
       self.sw.set_size_request(400,100)
       self.sw.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_ALWAYS)
       self.fix.put(self.sw, 300,500)
       self.sw.show()
       #Colocando o Label dentro da janela
       self.sw.add_with_viewport(self.lb)
       self.lb.show()

Erros comuns são não colocar as indentações corretas para as funções e linhas de código.


LIÇÂO ANTERIOR PRÓXIMA LIÇÂO
ÍNDICE HOMEPAGE