Main loop e segnali
GTK+ è event-driven: quando non ha niente da fare aspetta nel main loop in attesa di input e si attiva quando un segnale (o messaggio) arriva invocando una funzione connessa al segnale. Queste funzioni sono di solito chiamate callback.
La forma generica è
handler_id = widget.connect("event", callback, data)
dove:
widget è un istanza a un widget che abbiamo precedentemente creato (es. un pulsante).
Ogni widget ha uno o più event propri; per esempio il pulsante ha clicked
.
callback è il nome della funzione e data quanto ciò che viene passato alla funzione, l’argomento è opzionale.
La funzione ritorna un handler, un numero, può essere ignorato se non serve.
Praticamente tutte le applicazioni sono connesse a un segnale “delete-event
“ della finestra principale; se emesso l’applicazione viene chiusa. Esempio:
window.connect("delete-event", Gtk.main_quit)
Gtk.main_quit termina il main loop.
Proprietà
Ogni widget ha un suo insieme di proprietà che ne descrivono la configurazione. Per esempio per un’etichetta (label) allineata a destra, con testo “Hello World!”, inclinata di 25 gradi:
label = Gtk.Label(label="Hello World", angle=25, halign=Gtk.Align.END)
Quest’istruzione è equivalente a:
label = Gtk.Label()
label.set_label("Hello World")
label.set_angle(25)
label.set_halign(Gtk.Align.END)
È anche possibile ritrovare (get) o settare (set) le proprietà con widget.get_property("prop-name")
e widget.set_property("prop-name", value)
.
Le stringhe
Piccolo problema qui. Anticamente i ‘puters gestivano solo i caratteri ASCII, 128 caratteri, quelli ‘mericani, niente lettere accentate.
Python 2
La versione 2 di Python ha due tipi di stringhe: str
e unicode
.
È possibile usare le stringhe unicode in questi modi:
Peraltro Python 2 consente di mischiare le stringhe unicode e str se queste ultime contengono scolo caratteri ASCII
Esiste però la possibilità di usare il metacomando (direttiva) # -*- coding: utf-8 -*-
(dev’essere la prima o la seconda riga dello script).
Insomma un incubo; con gli script e la direttiva indicata in genere le cose funzionano.
Il problema è che GTK lavora con unicode. Per cui attenzione:
tutto OK, finché non mischiate.
Python 3
Unicode è adesso il default per le stringhe, niente più problemi.
Cioè di questo tipo, ma per rendere la vita interessante ce ne sono altri millemila
😉 🙂