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>