Python GTK+ 3 – inizio

logo1

Python has no native support for GUI (Graphical User Interface) programming, but this isn’t a problem since many GUI libraries written in other languages can be used by Python programmers. This is possible because many GUI libraries have Python wrappers or bindings; these are packages and modules that are imported and used like any other Python packages and modules but which access functionality that is in non-Python libraries under the hood.

Mark Summerfield: Programming in Python 3.

Vero, & peccato perché un’interfaccia grafica a volte torna molto comoda (e gli utenti la pretendono). Finora io ero un fedele seguace della chiesa di wxPython, è facile, completo, funziona.
Ma con un grosso limite: vale solo per la versione 2.x di Python. C’è il progetto Phoenix ma mi sembra fermo da chissà quando.
Forse è il caso di vedere qualcos’altro. Ecco allora GTK+ 3, non è detto che poi sia lui ma voglio provarlo, raccontandolo qui nel blog.

Ho una guida, The Python GTK+ 3 Tutorial di Sebastian Pölsterl.

Ah! una nota: sì per tante cose si continua a usare la versione 2.x di Python ma prima o poi…
Uh! un’altra nota: GTK lo trovate installato, con Python, almeno per Ubuntu; quindi niente spiegone per l’installazione.

E siamo così arrivati al capitolo 2 dove abbiamo il primo esempio, creare una finestra vuota (se.py):

#!/usr/bin/python3
# non c'è più bisogno di dire di usare UTF-8

from gi.repository import Gtk

win = Gtk.Window() #crea la finestra
win.connect('delete_event', Gtk.main_quit) # attiva la chiusura dell'app
win.show_all() # visualizza
Gtk.main() # avvia il loop di Gtk+

se

Siccome il codice è ampiamente commentato (contrariamente alle mie abitudini) devo solo rimarcare che per adesso la shebang è così, fa riferimento a Python 3. Notare inoltre che finalmente non devo più dire di usare l’UTF-8 per i caratteri non ascii (la seconda riga è messa lì per questo).

Una cosa: modificando le prime due righe così:

#!/usr/bin/python
# ci sarebbe ancora bisogno di dire di usare UTF-8

funziona con la versione 2, provare per credere.

Il passo successivo è di far fare qualcosa all’applicazione, ecco Hello World! (hw.py):

#!/usr/bin/python3

#hw.py

from gi.repository import Gtk

class MyWindow(Gtk.Window):
	def __init__(self):
		Gtk.Window.__init__(self, title = "Hello World!")
		self.button = Gtk.Button(label = "Click Here")
		self.button.connect("clicked", self.on_button_clicked)
		self.add(self.button)
	def on_button_clicked(self, widget):
		print('Hello World!')

win = MyWindow()
win.connect('delete_event', Gtk.main_quit)
win.show_all()
Gtk.main()

hw

Cose nuove: ho derivato la classe MyWindow da Gtk.Window, nel costruttore ho chiamato quello della classe madre, approfittandone per definire il titolo. Ho poi definito e visualizzato il pulsante button, collegando il messaggio clicked al metodo on.button_clicked(), definito subito dopo. Il resto è come nell’esempio precedente, con la differenza che l’istanza è a MyWindow invece di Gtk.Window.

OK, fine del capitolo, bravo Sebastian, tutto chiaro. E dalla prossima volta basta con queste spiegazioni elementari, neanche fossi un padano 😉

Posta un commento o usa questo indirizzo per il trackback.

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.