# Importamos el módulo de gtk, mediante este podemos acceder a todos los controles de Gtk+ import gtk # Creamos una clase para la ventana. class MainWindow: # Definimos un método especial de python llamado __init__, este inicializa todos los atributos de la función # al instarciar la clase. def __init__(self): # Creamos una ventana de tipo TOPLEVEL(permite estar al frende de todas las ventanas) llamada main_window. main_win = gtk.Window(gtk.WINDOW_TOPLEVEL) main_win.set_title("Canonico") # Al control main_window le conectamos una señal(destroy) que llamará al método on_quit. # Dicho método sera llamado cada ves que se presione el boton salir(equis) del manejador de ventanas # de main_window. main_win.connect("destroy", self.on_quit) # Le definimos una anchura de borde a la ventana de 7px. main_win.set_border_width(7) # Para añadir mas widgets(controles) a la ventana, es necesario crear contenedores como cajas. # Creamos una caja vertical con la propiedad homogeneo en False y un espaciado entre widgets de 5px. vbox = gtk.VBox(False, 5) # Creamos una etiqueta con la palabra reservada de python "self" para hacer referencia a esa # variable en otros métodos. self.label = gtk.Label("Cambio de etiqueta") # Creamos una entrada de texto en blanco. self.entry = gtk.Entry() # Le conectamos la señal activate que manda a llamar a su respectivo método. # Cuando presionemos enter sobre el widget entry llamara al método on_button1_clicked. self.entry.connect("activate", self.on_button1_clicked) # Creamos un botón, que por default sera el botón OK del inventario de botones de GNOME. button = gtk.Button(stock=gtk.STOCK_OK) # Cuando sea presionado el botón, emitirá la señal "clicked" que llamará a on_button1_clicked # por lo que debemos conectarla. button.connect("clicked", self.on_button1_clicked) # A la caja vertical anteriormente creada le añadimos primero la etiqueta llamada label. vbox.add(self.label) # Añadimos al inicio de la siguiente fila el entry con propiedades de expandir, rellenar y espaciado. vbox.pack_start(self.entry, True, True, 0) # De igual manera en la tercer fila agregamos el botón. vbox.pack_start(button, False, False, 0) # Agregamos la caja a la ventana. main_win.add(vbox) # Mostramos todo el contenido de la ventana. main_win.show_all() # El método toma como argumentos self(para referencia de widgets) y widget(en este caso) widget es el botón # que creamos, aunque por ahora no nos sirve de nada pero hay que declararlo. def on_button1_clicked(self, widget): # Obtenemos el texto que se escriba en el entry y loguardamos en la variable text. text = self.entry.get_text() # Le pasamos ese texto a la etiqueta. self.label.set_text(text) def on_quit(self, widget): # Destruye la aplicación y el método gtk.main(). gtk.main_quit() # Cuando se importa el archivo como módulo __name__ toma el nombre del archivo. # También se puede correr el módulo directamente como un programa independiente, en ese caso __name__ # tomará por default el valor "__main__". # Checar la documentación de Python para más detalle. if __name__ == "__main__": # Instanciamos la clase. MainWindow() # Iniciamos el método main de gtk, este genera un ciclo que sirve para recibir todas las señales emitidas. gtk.main()