Archivos:

Ejemplo:

# 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() 

Corremos el ejemplo de la siguiente manera:

eric@localhost:~$ python CanonicoApp.py



Inicio Siguiente