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