= Receita: Várias Rotinas Usando ComboBoxEntry no PyGtk = Exemplo de várias rotinas de comboboxentry para usar no seu aplicativo. == Código == {{{ #!python #-*- encoding: utf8 -*- ## # Esse programa é livre, você pode distribuir e/ou modifica-lo sob os # termos da licença geral publica GNU publicada pela fundação de software # livre (Free Software Foundation), contida na segunda versão da licença # ou (em sua opinião) outra versão mais recente. # Esse programa é distribuído na esperança de ser útil e satisfatório, # mas DESTITUÍDO DE QUALQUER GARANTIA, destituído igualmente da # COMPATIBILIDADE DE MÁQUINA ou CONVENIÊNCIA PARA PROPÓSITOS # PARTICULARES. Veja a licença geral publica GNU para opter mais detalhes. # http://www.gnu.org/copyleft/gpl.html ## ############################################################################### ## Nome do Arquivo: utilitario ## Autor: Guedes, Maurilio ## Data da Criação: 26/11/2004 ## Data da Modificação: 03/07/2005 ## Finalidade: Funções úteis do dia-a-dia ## ## ## ############################################################################### import pygtk pygtk.require('2.0') import gtk def combo_entry_autocompletar(combo, coluna= 0, caracter= 1): ''' Uso: combo_entry_autocompletar(combo, coluna, tecla) combo -> ponteiro do comboboxentry coluna -> número da coluna que usará o autocomplemento caracter -> apartir de quantos e caracteres digitados ocorerá o autocomplemento Adiciona o recurso de autocomplemento no comboboxentry ''' completar= gtk.EntryCompletion() completar.set_model(combo.get_model()) completar.set_minimum_key_length(caracter) completar.set_text_column(coluna) combo.child.set_completion(completar) def combo_entry_selecao(combo, retorno_coluna= 0, coluna= 0): ''' Uso: combo_entry_selecao(combo, retorno_coluna= 0, coluna= 0) combo -> ponteiro do comboboxentry retorno_coluna -> número da coluna para retorno coluna -> número da coluna que será comparada Seleciona o texto do registro atual no comboboxentry ''' texto = combo.child.get_text() lista= combo.get_model() if texto: for registro in lista: if registro[coluna] == texto: return registro[retorno_coluna] combo.child.grab_focus() # combo.child.select_region(0, -1) # Rotina vista em http://www.pythonbrasil.com.br/moin.cgi/PyGtkMensagens mensagem_erro('Você Deve Escolher um Item da Lista!') return 0 def combo_entry_selecionar(texto, combo, coluna= 0): ''' Uso: combo_entry_selecionar(texto,combo, coluna) texto -> texto a ser selecionado no comboboxentry combo -> ponteiro do comboboxentry coluna -> número da coluna que será comparada Seleciona o texto no comboboxentry ''' indice= 0 modelo= combo.get_model() for registro in modelo: if registro[coluna] == texto: combo.set_active(indice) break indice+= 1 def carregar_data(dia, mes, ano): ''' Uso: carregar_data(dia, mes, ano) dia -> ponteiro do comboboxentry referente ao dia mes -> ponteiro do comboboxentry referente ao mês ano -> ponteiro do comboboxentry referente ao ano Carrega o dia, mês e ano nos comboboxentry correspondente ''' modelo= gtk.ListStore(str) for i in range(1, 32): texto= str('%02.f') % i modelo.append([texto]) dia.set_model(modelo) modelo= gtk.ListStore(str, str) modelo.append(['Janeiro', '01']) modelo.append(['Fevereiro', '02']) modelo.append(['Março', '03']) modelo.append(['Abril', '04']) modelo.append(['Maio', '05']) modelo.append(['Junho', '06']) modelo.append(['Julho', '07']) modelo.append(['Agosto', '08']) modelo.append(['Setembro', '09']) modelo.append(['Outubro', '10']) modelo.append(['Novembro', '11']) modelo.append(['Dezembro', '12']) mes.set_model(modelo) modelo= gtk.ListStore(str) for i in range(1900, 2100): modelo.append([i]) ano.set_model(modelo) combo_entry_autocompletar(dia) combo_entry_autocompletar(mes) combo_entry_autocompletar(ano) def carregar_semana(combo): ''' Uso: carregar_semana(combo) combo -> ponteiro do comboboxentry Carrega os dias da semana no combo especificado ''' modelo= gtk.ListStore(str, str) modelo.append(['Domingo', '1']) modelo.append(['Segunda-Feira', '2']) modelo.append(['Terça-Feira', '3']) modelo.append(['Quarta-Feira', '4']) modelo.append(['Quinta-Feira', '5']) modelo.append(['Sexta-Feira', '6']) modelo.append(['Sábado', '7']) combo.set_model(modelo) combo_entry_autocompletar(combo) }}} == Exemplo de uso == {{{ #!python #-*- encoding: utf8 -*- ## # Esse programa é livre, você pode distribuir e/ou modifica-lo sob os # termos da licença geral publica GNU publicada pela fundação de software # livre (Free Software Foundation), contida na segunda versão da licença # ou (em sua opinião) outra versão mais recente. # Esse programa é distribuído na esperança de ser útil e satisfatório, # mas DESTITUÍDO DE QUALQUER GARANTIA, destituído igualmente da # COMPATIBILIDADE DE MÁQUINA ou CONVENIÊNCIA PARA PROPÓSITOS # PARTICULARES. Veja a licença geral publica GNU para opter mais detalhes. # http://www.gnu.org/copyleft/gpl.html ## ############################################################################### ## Nome do Arquivo: teste.py ## Autor: Guedes, Maurilio ## Data da Criação: 19/08/2005 ## Data da Modificação: 20/08/2005 ## Finalidade: Testar o uso do arquivo utilitario.py ## ## ## ############################################################################### import pygtk pygtk.require('2.0') import gtk, time import utilitario class Principal: '''Classe principal''' def __init__(self): '''Incialização padrão''' # Cria uma janela self.janela = gtk.Window(gtk.WINDOW_TOPLEVEL) self.janela.set_title("Usando a Rotina Utilitário") # Coloca um título self.janela.set_border_width(5) # Especifica uma porda de 5 pixels self.janela.set_position(gtk.WIN_POS_CENTER) # Centraliza a janela # Fecha o aplicativo ao destruir a janela self.janela.connect("destroy", gtk.main_quit) # Cria uma caixa vertical self.caixa= gtk.VBox(False, 0) self.janela.add(self.caixa) # Adiciona a caixa na janela # Cria uma caixa horizontal self.caixa2= gtk.HBox(False, 0) # Cria um comboboxentry self.dia= gtk.combo_box_entry_new_text() self.dia.set_size_request(60, 25) # Muda largura e altura # Cria um comboboxentry self.mes= gtk.combo_box_entry_new_text() self.mes.set_size_request(120, 25) # Muda largura e altura # Cria um comboboxentry self.ano= gtk.combo_box_entry_new_text() self.ano.set_size_request(90, 25) # Muda largura e altura self.caixa2.pack_start(self.dia, True, True, 0) # Adiciona o combo na caixa self.caixa2.pack_start(self.mes, True, True, 0) # Adiciona o combo na caixa self.caixa2.pack_start(self.ano, True, True, 0) # Adiciona o combo na caixa # Cria uma moldura self.moldura= gtk.Frame('Data') self.moldura.add(self.caixa2) # Adiciona a caixa na moldura # Cria uma caixa horizontal self.caixa3= gtk.HBox(False, 0) # Cria um comboboxentry self.semana= gtk.combo_box_entry_new_text() self.semana.set_size_request(60, 25) # Muda largura e altura # Adiciona o combo na caixa self.caixa3.pack_start(self.semana, True, True, 0) # Cria uma moldura self.moldura2= gtk.Frame('Semana') self.moldura2.add(self.caixa3) # Adiciona a caixa na moldura # Cria um separador self.separador= gtk.HSeparator() # Cria um botão self.botao= gtk.Button('O Que Escolhi?') # Execute o método "escolher" ao clicar self.botao.connect('clicked', self.escolher) # Cria um botão self.botao2= gtk.Button('Hoje é ...') # Execute o método "carregar_hoje" ao clicar self.botao2.connect('clicked', self.carregar_hoje) # Cria uma caixa horizontal self.caixa4= gtk.HBox(False, 0) self.caixa4.pack_start(self.botao, True, True, 0) # Adiciona o botão na caixa self.caixa4.pack_start(self.botao2, True, True, 0) # Adiciona o botão na caixa # Carrega dia, mês e ano nos combos especificados utilitario.carregar_data(self.dia, self.mes, self.ano) # Carrega os dias da semana no combo especificado utilitario.carregar_semana(self.semana) # Adiciona as molduras na caixa self.caixa.pack_start(self.moldura, True, True, 0) self.caixa.pack_start(self.moldura2, True, True, 0) # Adiciona o separador na caixa com espaçamento de 5 pixels self.caixa.pack_start(self.separador, True, True, 5) # Adiciona a caixa (contendo os botões) na caixa self.caixa.pack_start(self.caixa4, True, True, 0) # Mostra todas os widgets adicionados na janela self.janela.show_all() def escolher(self, widget= None): '''Executa o código abaixo''' dia= utilitario.combo_entry_selecao(self.dia) # Captura o dia do combo mes= utilitario.combo_entry_selecao(self.mes) # Captura o mês do combo ano= utilitario.combo_entry_selecao(self.ano) # Captura o ano do combo # Captura o semana do combo semana= utilitario.combo_entry_selecao(self.semana) # Se dia, mes ou ano retornarem False, não faz mas nada if not dia or not mes or not ano: return False # Formata o texto para exibir na mensagem texto= 'Você Escolheu %s/%s/%s e %s' % (dia, mes, ano, semana) # Rotina vista em http://www.pythonbrasil.com.br/moin.cgi/PyGtkMensagens utilitario.mensagem(texto) # Exibe uma mensagem def carregar_hoje(self, widget= None): '''Executa o código abaixo''' # Captura ano, mês, dia..... do sistema ano, mes, dia, hora, minuto, segundo, semana, juliano, verao= time.localtime() # Seleciona o dia no comboboxentry utilitario.combo_entry_selecionar(str(dia), self.dia) # Seleciona o mês no comboboxentry utilitario.combo_entry_selecionar(str( '%02d' % mes),self.mes, 1) # Seleciona o ano no comboboxentry utilitario.combo_entry_selecionar(str(ano), self.ano) # Seleciona a semana no comboboxentry utilitario.combo_entry_selecionar(str(self.retornar_dia_semana(semana)), self.semana, 1) def retornar_dia_semana(self, dia_semana_sistema= 0): ''' Uso: retornar_dia_semana(dia_semana_sistema) dia_semana_sistema -> dia da semana pelo python Retorna o dia da semana personalizado ''' dia= [2, 3, 4, 5, 6, 7, 1] return dia[dia_semana_sistema] if __name__ == '__main__': '''Se o aplicativo é principal, execute esse método''' # Chama a classe 'Principal' p= Principal() # Inicia o aplicativo gtk.main() }}} == Agradecimento == Agradeço aos amigos Antonio Prado e Acidx (Leandro) pela ajuda em algumas rotinas. Volta para CookBook. ---- Guedes, Maurilio