La gestione dei segnali

Arricchiamo l’esempio dell’Hello World dandogli almeno la possibilità di chiudersi correttamente, cliccando sulla X della finestra.

Tornando al progetto su Glade, selezionata la finestra window1, cliccando sulla scheda Segnali saranno mostrati tutti i segnali previsti per quella classe e per tutte le classi da cui deriva. Spostandoci sulla classe GTKObject troveremo il segnale destroy che verrà eseguito al momento in cui viene distrutto l’oggetto, ovvero subito dopo la chiusura della finestra.

Accanto al segnale destroy è possibile scegliere oppure immettere manualmente il nome di una funzione da eseguire, in questo esempio lasceremo il nome predefinito on_window1_destroy. Questo nome dovrà essere collegato su Python; la maniera più semplice è quella di usare il metodo signal_autoconnect del file Glade, che richiede solo un parametro: un dizionario contenente le funzioni e i metodi da eseguire. La chiave di ogni elemento sarà il nome indicato su Glade e il valore è il nome della funzione.

Sul progetto python aggiungeremo una funzione di callback per questo segnale:

def on_window1_destroy(widget, data=None):
  gtk.main_quit()

Il nome della funzione non è realmente importante, potrebbe essere differente da quello indicato nel file Glade ma per semplificare la lettura si raccomanda di tenerli coerenti tra i due. La funzione di gestione di questo segnale, come molti altri, richiede due argomenti: widget corrisponde al riferimento del controllo che ha fatto scattare il segnale e data fornirà gli eventuali valori aggiuntivi che saranno forniti alla funzione di callback, se non sarà fornito nulla, assumerà valore None.

Questa è la forma convenzionale con cui vengono scritte le funzioni di callback per i segnali, se questi non richiedono parametri aggiuntivi.

Abbiamo detto che il nome della funzione di callback non è importante, quindi per collegare questa funzione di callback al segnale indicato su Glade? Il metodo signal_autoconnect ha bisogno di un dizionario che associ i nomi indicati su Glade alle funzioni di Python.

Un esempio semplice potrebbe essere questo:

segnali = {
  'on_window1_destroy': on_window1_destroy
}
gladeFile.signal_autoconnect(segnali)

Questo associerà automaticamente tutti i segnali presenti nel dizionario chiamato segnali. Adesso avviando il programma Python, al click sulla finestra si chiuderà anche il mainloop, e quindi, non essendoci altre istruzioni sotto gtk.main() si chiuderà anche il programma.

E’ possibile scaricare il progetto Python e l’interfaccia Glade.

2 Responses to “La gestione dei segnali”


  1. 1 dido89 ottobre 12, 2008 alle 12:48 pm

    Complimenti davvero per il blog!

  2. 2 Bertus ottobre 13, 2008 alle 5:17 pm

    Finalmente ho la possibilità di apprendere pygtk in italiano.
    Vai avanti così e grazie…


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...




Indice degli argomenti


%d blogger cliccano Mi Piace per questo: