QUICK REFERENCE: COMBOBOX

Simplificadamente podemos dizer que computação se resume a: Entrada - Processamento - Saída.

A entrada "natural" de dados feita pelo usuário é através do TextBox (Entry, para o XO). Mas essa entrada pode ser bastante desuniforme. Por exemplo: se se pede para usuários entrarem com o nome de seu estado: um vai colocar "Minas Gerais", outro: "Minas", um terceiro: "MG" etc.

Para facilitar isso temos três "controls" ("widgets"): o CheckBox (CheckButton), o ComboBox e os RadioButtons. Nesses controls, o usuário seleciona uma entrada pré-determinada.

(As saídas convencionais são o Label e a ScrolledWindow. É claro que hoje temos entradas e saídas em som, animações etc.)

Já vimos o CheckButton. Nessa lição vamos falar do ComboBox que é uma lista que se abre, e onde, clicando, se seleciona um dado.

Um objeto ComboBox pode ser criado com, por exemplo:

self.cb = gtk.combo_box_new_text()

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

Os métodos de ComboBox são:

show()

hide()

destroy()

append_text("string")

Adiciona um elemento à lista.

clear()

Apaga todos os elementos

set_active(index)

Seleciona o elemento na posição Index e o coloca no cabeçalho do ComboBox. O primeiro elemento é ZERO.O uso desse método dispara um signal changed - ver abaixo. É usual manter sempre um mesmo cabeçalho - o que fazemos no exercício.

get_active()

Retorna o index (a posição) do elemento clicado.

insert_text(index,"string" )

Adiciona um elemento à lista, na posição index

prepend_text("string")

Adiciona um elemento à lista, como primeiro.

remove_text("string")

Remove elemento da lista.

Como um botão, um clique num elemento 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 do clique, dispara essa função. Esse "algo que se fez" é chamado de "signal". Os signal que equivale ao clique é

E o método é:

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

Para capturar o texto clicado, primeiro criamos um "model" que é uma matrix que tem apenas uma coluna (zero) e , em cada linha, um dos elementos do ComboBox. Usamos então um get_active(). O método para criar o "model" é: get_model(). Veja no exercício.

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 *= 3
       #Criando base para layout
       self.fix = gtk.Fixed()
       self.add(self.fix)
       self.fix.show()
       #Criando um Label para mostrar o selecionado
       self.lb = gtk.Label()
       self.fix.put(self.lb,600,200)
       self.lb.show()
       #Criando o ComboBox
       self.cb = gtk.combo_box_new_text()
       self.cb.append_text("Estados")
       self.cb.append_text("MG")
       self.cb.append_text("SP")
       self.cb.append_text("RGS")
       self.cb.append_text("GB")
       self.fix.put(self.cb1, 200,200)
       #Fazendo o primeiro elemento aparecer como cabeçalho
       self.cb.set_active(0)
       self.cb.show()
       self.cb.connect("changed",self.selecionado, None)
      
       
    
   def selecionado(self,widget,data=None):
       #Criando a matrix model
       self.model = self.cb.get_model() 
       #Capturando o index do clicado
       index = self.cb.get_active()
       #Para colocar o selecionado no Label (menos o cabeçalho)
       if(self.model[index][0] != "Estados"):
           self.lb.set_text(self.model[index][0])
       #Para o elemento cabeçalho (zero) permanecer:
       self.cb.set_active(0)     
      

Claro que você não precisa usar o "truque do cabeçalho". É apenas nossa sugestão.


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