associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

PyGtkComboBoxEntry

Receita: Várias Rotinas Usando ComboBoxEntry no PyGtk

Exemplo de várias rotinas de comboboxentry para usar no seu aplicativo.

Código

   1 #-*- encoding: utf8 -*-
   2 
   3 ##
   4 # Esse programa é livre, você pode distribuir e/ou modifica-lo sob os
   5 # termos da licença geral publica GNU publicada pela fundação de software
   6 # livre (Free Software Foundation),  contida na segunda versão da licença
   7 # ou (em sua opinião) outra versão mais recente.
   8 # Esse programa é distribuído na esperança de ser útil e satisfatório,
   9 # mas DESTITUÍDO DE QUALQUER GARANTIA, destituído igualmente da
  10 # COMPATIBILIDADE DE MÁQUINA ou CONVENIÊNCIA PARA PROPÓSITOS
  11 # PARTICULARES. Veja a licença geral publica GNU para opter mais detalhes.
  12 # http://www.gnu.org/copyleft/gpl.html
  13 ##
  14 
  15 ###############################################################################
  16 ## Nome do Arquivo: utilitario
  17 ## Autor: Guedes, Maurilio<billguedes>
  18 ## Data da Criação: 26/11/2004
  19 ## Data da Modificação: 03/07/2005
  20 ## Finalidade: Funções úteis do dia-a-dia
  21 ##
  22 ##
  23 ##
  24 ###############################################################################
  25 
  26 import pygtk
  27 pygtk.require('2.0')
  28 import gtk
  29 
  30 def combo_entry_autocompletar(combo, coluna= 0, caracter= 1):
  31         '''
  32         Uso: combo_entry_autocompletar(combo, coluna, tecla)
  33         combo -> ponteiro do comboboxentry
  34         coluna -> número da coluna que usará o autocomplemento
  35         caracter -> apartir de quantos e caracteres digitados ocorerá o autocomplemento
  36 
  37         Adiciona o recurso de autocomplemento no comboboxentry
  38         '''
  39         
  40         completar= gtk.EntryCompletion()
  41         completar.set_model(combo.get_model())
  42         completar.set_minimum_key_length(caracter)
  43         completar.set_text_column(coluna)
  44         combo.child.set_completion(completar)
  45 
  46 def combo_entry_selecao(combo, retorno_coluna= 0, coluna= 0):
  47         '''
  48         Uso: combo_entry_selecao(combo, retorno_coluna= 0, coluna= 0)
  49         combo -> ponteiro do comboboxentry
  50         retorno_coluna -> número da coluna para retorno
  51         coluna -> número da coluna que será comparada
  52         
  53         Seleciona o texto do registro atual no comboboxentry
  54         '''
  55         
  56         texto = combo.child.get_text()
  57         lista= combo.get_model()
  58         if texto:
  59                 for registro in lista:
  60                         if registro[coluna] == texto: return registro[retorno_coluna]
  61         combo.child.grab_focus()
  62 #       combo.child.select_region(0, -1)
  63 
  64         # Rotina vista em http://www.pythonbrasil.com.br/moin.cgi/PyGtkMensagens
  65         mensagem_erro('Você Deve Escolher um Item da Lista!')
  66         return 0
  67 
  68 def combo_entry_selecionar(texto, combo, coluna= 0):
  69         '''
  70         Uso: combo_entry_selecionar(texto,combo, coluna)
  71         texto -> texto a ser selecionado no comboboxentry
  72         combo -> ponteiro do comboboxentry
  73         coluna -> número da coluna que será comparada
  74         
  75         Seleciona o texto no comboboxentry
  76         '''
  77         
  78         indice= 0
  79         modelo= combo.get_model()
  80         for registro in modelo:
  81                 if registro[coluna] == texto:
  82                         combo.set_active(indice)
  83                         break
  84                 indice+= 1
  85 
  86 def carregar_data(dia, mes, ano):
  87         '''
  88         Uso: carregar_data(dia, mes, ano)
  89         dia -> ponteiro do comboboxentry referente ao dia
  90         mes -> ponteiro do comboboxentry referente ao mês
  91         ano -> ponteiro do comboboxentry referente ao ano
  92 
  93         Carrega o dia, mês e ano nos comboboxentry correspondente
  94         '''
  95         
  96         modelo= gtk.ListStore(str)
  97         for i in range(1, 32):
  98                 texto= str('%02.f') % i
  99                 modelo.append([texto])
 100         dia.set_model(modelo)
 101         
 102         modelo= gtk.ListStore(str, str)
 103         modelo.append(['Janeiro', '01'])
 104         modelo.append(['Fevereiro', '02'])
 105         modelo.append(['Março', '03'])
 106         modelo.append(['Abril', '04'])
 107         modelo.append(['Maio', '05'])
 108         modelo.append(['Junho', '06'])
 109         modelo.append(['Julho', '07'])
 110         modelo.append(['Agosto', '08'])
 111         modelo.append(['Setembro', '09'])
 112         modelo.append(['Outubro', '10'])
 113         modelo.append(['Novembro', '11'])
 114         modelo.append(['Dezembro', '12'])
 115         mes.set_model(modelo)
 116         
 117         modelo= gtk.ListStore(str)
 118         for i in range(1900, 2100):
 119                 modelo.append([i])
 120         ano.set_model(modelo)
 121         
 122         combo_entry_autocompletar(dia)
 123         combo_entry_autocompletar(mes)
 124         combo_entry_autocompletar(ano)  
 125         
 126 def carregar_semana(combo):
 127         '''
 128         Uso: carregar_semana(combo)
 129         combo -> ponteiro do comboboxentry
 130         
 131         Carrega os dias da semana no combo especificado
 132         '''
 133 
 134         modelo= gtk.ListStore(str, str)
 135         modelo.append(['Domingo', '1'])
 136         modelo.append(['Segunda-Feira', '2'])
 137         modelo.append(['Terça-Feira', '3'])
 138         modelo.append(['Quarta-Feira', '4'])
 139         modelo.append(['Quinta-Feira', '5'])
 140         modelo.append(['Sexta-Feira', '6'])
 141         modelo.append(['Sábado', '7'])
 142         combo.set_model(modelo)
 143         combo_entry_autocompletar(combo)

Exemplo de uso

   1 #-*- encoding: utf8 -*-
   2 
   3 ##
   4 # Esse programa é livre, você pode distribuir e/ou modifica-lo sob os
   5 # termos da licença geral publica GNU publicada pela fundação de software
   6 # livre (Free Software Foundation),  contida na segunda versão da licença
   7 # ou (em sua opinião) outra versão mais recente.
   8 # Esse programa é distribuído na esperança de ser útil e satisfatório,
   9 # mas DESTITUÍDO DE QUALQUER GARANTIA, destituído igualmente da
  10 # COMPATIBILIDADE DE MÁQUINA ou CONVENIÊNCIA PARA PROPÓSITOS
  11 # PARTICULARES. Veja a licença geral publica GNU para opter mais detalhes.
  12 # http://www.gnu.org/copyleft/gpl.html
  13 ##
  14 
  15 ###############################################################################
  16 ## Nome do Arquivo: teste.py
  17 ## Autor: Guedes, Maurilio<billguedes>
  18 ## Data da Criação: 19/08/2005
  19 ## Data da Modificação: 20/08/2005
  20 ## Finalidade: Testar o uso do arquivo utilitario.py
  21 ##
  22 ##
  23 ##
  24 ###############################################################################
  25 
  26 import pygtk
  27 pygtk.require('2.0')
  28 import gtk, time
  29 import utilitario
  30 
  31 class Principal:
  32         '''Classe principal'''
  33         
  34         def __init__(self):
  35                 '''Incialização padrão'''
  36                 
  37                 # Cria uma janela
  38                 self.janela = gtk.Window(gtk.WINDOW_TOPLEVEL)
  39                 self.janela.set_title("Usando a Rotina Utilitário") # Coloca um título
  40                 self.janela.set_border_width(5) # Especifica uma porda de 5 pixels
  41                 self.janela.set_position(gtk.WIN_POS_CENTER) # Centraliza a janela
  42 
  43                 # Fecha o aplicativo ao destruir a janela
  44                 self.janela.connect("destroy", gtk.main_quit)
  45 
  46                 # Cria uma caixa vertical
  47                 self.caixa= gtk.VBox(False, 0)
  48                 self.janela.add(self.caixa) # Adiciona a caixa na janela
  49                 
  50                 # Cria uma caixa horizontal
  51                 self.caixa2= gtk.HBox(False, 0)
  52                 
  53                 # Cria um comboboxentry
  54                 self.dia= gtk.combo_box_entry_new_text()
  55                 self.dia.set_size_request(60, 25) # Muda largura e altura
  56                 
  57                 # Cria um comboboxentry
  58                 self.mes= gtk.combo_box_entry_new_text()
  59                 self.mes.set_size_request(120, 25) # Muda largura e altura
  60                 
  61                 # Cria um comboboxentry
  62                 self.ano= gtk.combo_box_entry_new_text()
  63                 self.ano.set_size_request(90, 25) # Muda largura e altura
  64 
  65                 self.caixa2.pack_start(self.dia, True, True, 0) # Adiciona o combo na caixa
  66                 self.caixa2.pack_start(self.mes, True, True, 0) # Adiciona o combo na caixa
  67                 self.caixa2.pack_start(self.ano, True, True, 0) # Adiciona o combo na caixa
  68                 
  69                 # Cria uma moldura
  70                 self.moldura= gtk.Frame('Data')
  71                 self.moldura.add(self.caixa2) # Adiciona a caixa na moldura
  72                 
  73                 # Cria uma caixa horizontal
  74                 self.caixa3= gtk.HBox(False, 0)
  75                 
  76                 # Cria um comboboxentry
  77                 self.semana= gtk.combo_box_entry_new_text()
  78                 self.semana.set_size_request(60, 25) # Muda largura e altura
  79                 
  80                 # Adiciona o combo na caixa
  81                 self.caixa3.pack_start(self.semana, True, True, 0)
  82                 
  83                 # Cria uma moldura
  84                 self.moldura2= gtk.Frame('Semana')
  85                 self.moldura2.add(self.caixa3) # Adiciona a caixa na moldura
  86                 
  87                 # Cria um separador
  88                 self.separador= gtk.HSeparator()
  89                 
  90                 # Cria um botão
  91                 self.botao= gtk.Button('O Que Escolhi?')
  92                 
  93                 # Execute o método "escolher" ao clicar
  94                 self.botao.connect('clicked', self.escolher)
  95                 
  96                 # Cria um botão
  97                 self.botao2= gtk.Button('Hoje é ...')
  98                 
  99                 # Execute o método "carregar_hoje" ao clicar
 100                 self.botao2.connect('clicked', self.carregar_hoje)
 101 
 102                 # Cria uma caixa horizontal
 103                 self.caixa4= gtk.HBox(False, 0)
 104                 self.caixa4.pack_start(self.botao, True, True, 0) # Adiciona o botão na caixa
 105                 self.caixa4.pack_start(self.botao2, True, True, 0) # Adiciona o botão na caixa
 106 
 107                 # Carrega dia, mês e ano nos combos especificados
 108                 utilitario.carregar_data(self.dia, self.mes, self.ano)
 109                 
 110                 # Carrega os dias da semana no combo especificado
 111                 utilitario.carregar_semana(self.semana)
 112                 
 113                 # Adiciona as molduras na caixa
 114                 self.caixa.pack_start(self.moldura, True, True, 0) 
 115                 self.caixa.pack_start(self.moldura2, True, True, 0)
 116                 
 117                 # Adiciona o separador na caixa com espaçamento de 5 pixels
 118                 self.caixa.pack_start(self.separador, True, True, 5)
 119                 
 120                 # Adiciona a caixa (contendo os botões) na caixa
 121                 self.caixa.pack_start(self.caixa4, True, True, 0)
 122                 
 123                 # Mostra todas os widgets adicionados na janela
 124                 self.janela.show_all()
 125 
 126         def escolher(self, widget= None):
 127                 '''Executa o código abaixo'''
 128                 
 129                 dia= utilitario.combo_entry_selecao(self.dia) # Captura o dia do combo
 130                 mes= utilitario.combo_entry_selecao(self.mes) # Captura o mês do combo
 131                 ano= utilitario.combo_entry_selecao(self.ano) # Captura o ano do combo
 132                 
 133                 # Captura o semana do combo
 134                 semana= utilitario.combo_entry_selecao(self.semana)
 135                 
 136                 # Se dia, mes ou ano retornarem False, não faz mas nada
 137                 if not dia or not mes or not ano: return False
 138                 
 139                 # Formata o texto para exibir na mensagem
 140                 texto= 'Você Escolheu <b>%s/%s/%s</b> e <b>%s</b>' % (dia, mes, ano, semana)
 141                 
 142                 # Rotina vista em http://www.pythonbrasil.com.br/moin.cgi/PyGtkMensagens
 143                 utilitario.mensagem(texto) # Exibe uma mensagem
 144                 
 145         def carregar_hoje(self, widget= None):
 146                 '''Executa o código abaixo'''
 147                 
 148                 # Captura ano, mês, dia..... do sistema
 149                 ano, mes, dia, hora, minuto, segundo, semana, juliano, verao= time.localtime()
 150                 
 151                  # Seleciona o dia no comboboxentry
 152                 utilitario.combo_entry_selecionar(str(dia), self.dia)
 153                 
 154                 # Seleciona o mês no comboboxentry
 155                 utilitario.combo_entry_selecionar(str( '%02d' % mes),self.mes, 1)
 156                 
 157                 # Seleciona o ano no comboboxentry
 158                 utilitario.combo_entry_selecionar(str(ano), self.ano)
 159                 
 160                 # Seleciona a semana no comboboxentry
 161                 utilitario.combo_entry_selecionar(str(self.retornar_dia_semana(semana)),
 162                 self.semana, 1)
 163                 
 164         def retornar_dia_semana(self, dia_semana_sistema= 0):
 165                 '''
 166                 Uso: retornar_dia_semana(dia_semana_sistema)
 167                 dia_semana_sistema -> dia da semana pelo python
 168 
 169                 Retorna o dia da semana personalizado
 170                 '''
 171         
 172                 dia= [2, 3, 4, 5, 6, 7, 1]
 173                 return dia[dia_semana_sistema]
 174 
 175 if __name__ == '__main__':
 176         '''Se o aplicativo é principal, execute esse método'''
 177         
 178         # Chama a classe 'Principal'                    
 179         p= Principal()
 180 
 181         # Inicia o aplicativo
 182         gtk.main()

Agradecimento

Agradeço aos amigos Antonio Prado e Acidx (Leandro) pela ajuda em algumas rotinas.

Volta para CookBook.


Guedes, Maurilio <billguedes.python at terra.com.br>