1 #!/usr/bin/env python
2
3 # Ejemplo helloworld2.py
4
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
8
9 class HelloWorld2:
10
11 # La retrollamada mejorada. Los datos que se pasan a esta función
12 # se imprimen por la salida estándar.
13 def callback(self, widget, data):
14 print "Hello again - %s was pressed" % data
15
16 # otra retrollamada
17 def delete_event(self, widget, event, data=None):
18 gtk.main_quit()
19 return gtk.FALSE
20
21 def __init__(self):
22 # Creamos una ventana
23 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
24
25 # Esta llamada establece el título de la
26 # ventana como "Hello Buttons!"
27 self.window.set_title("Hello Buttons!")
28
29 # Aquí establecemos un manejador para delete_event que
30 # sale inmediatamente de GTK+.
31 self.window.connect("delete_event", self.delete_event)
32
33 # Establece el grosor del borde de la ventana
34 self.window.set_border_width(10)
35
36 # Creamos una caja en la que empaquetar los controles. Esto se describe detalladamente
37 # en la sección de "empaquetado". La caja no es visible en realidad sino que simplemente
38 # facilita la organización de los controles.
39 self.box1 = gtk.HBox(gtk.FALSE, 0)
40
41 # Introducimos la caja en la ventana principal
42 self.window.add(self.box1)
43
44 # Crea un nuevo botón con la etiqueta "Button 1".
45 self.button1 = gtk.Button("Button 1")
46
47 # Ahora, cuando se pulsa el botón, llamamos al método "callback"
48 # con un puntero a "button 1" como argumento
49 self.button1.connect("clicked", self.callback, "button 1")
50
51 # En vez de usar add(), empaquetamos este botón en la caja visible
52 # que ha sido introducida en la ventana.
53 self.box1.pack_start(self.button1, gtk.TRUE, gtk.TRUE, 0)
54
55 # Hay que recordar siempre este paso, que indica a GTK+ que la preparación del
56 # botón ha terminado y que ya es posible mostrarlo.
57 self.button1.show()
58
59 # Seguimos los mismos pasos para crear el segundo botón
60 self.button2 = gtk.Button("Button 2")
61
62 # Llamamos la misma retrollamada pero con un argumento diferente,
63 # haciendo referencia a "button 2" esta vez.
64 self.button2.connect("clicked", self.callback, "button 2")
65
66 self.box1.pack_start(self.button2, gtk.TRUE, gtk.TRUE, 0)
67
68 # El orden en que mostramos los botones no es muy importante, pero es recomendable
69 # mostrar la ventana en último lugar, puesto que así aparece todo de una vez.
70 self.button2.show()
71 self.box1.show()
72 self.window.show()
73
74 def main():
75 gtk.main()
76
77 if __name__ == "__main__":
78 hello = HelloWorld2()
79 main()
Correndo helloworld2.py janela é gerada Figura 3.1, "Exemplo atualizado Olá Mundo" . Desta vez, você pode ver que não há nenhuma maneira fácil de sair do programa, e é necessário usar a linha de gerenciador de janelas ou de comando para excluí-lo. Um bom exercício para o leitor seria inserir um terceiro botão "Sair" para fechar o programa. Seria interessante jogar com opções pack_start () ao ler a secção seguinte e tentar redimensionar a janela e ver o que acontece.
Como uma nota, devemos mencionar outra constante útil para
gtk.Window
() - WINDOW_DIALOG
. Este tipo de janela interage de forma diferente com o gerenciador de janelas e deve ser usado em janelas uso temporário. Seguem-se pequenas diferenças no código de sequência em relação à versão inicial do programa "Olá Mundo":
Como já foi mencionado, não há manipulador de eventos "destruir" nesta versão melhorada "Olá Mundo".
Linhas 13-14 definir um método de retorno semelhante ao callback
hello
() o exemplo inicial. A diferença é que o retorno de chamada imprime uma mensagem, incluindo dados a serem fornecidos. Linha 27 conjuntos de um título para a barra de título da janela (ver Figura 3.1, "Exemplo atualizado Olá Mundo" ).
Linha 39 cria uma caixa horizontal (
gtk.HBox
) armazenar os dois botões criados nas linhas 45 e 60. Linha 42 acrescenta a caixa horizontal para o recipiente janela. As linhas 49 e 64 conectar o método
callback
() para o "clicado" botões de sinal. Cada botão define uma string diferente passado para o método callback
() para ser chamado. Linhas 53 e 66 embalar os botões na caixa horizontal. E, finalmente, as linhas 57 e 70 perguntar GTK para exibir os botões.
Linhas 71-72 pedir GTK para exibir a caixa ea janela.
Nenhum comentário:
Postar um comentário