Inizio del viaggio tra le Gtk3

Devo ammetterlo sono un pochino stanco delle solite cose.
Al lavoro sono sempre lì a barcamenarmi tra java e php, ogni tanto un programmatore ha bisogno di solleticare la sua curiosità, il suo interesse, e magari mettere le mani su qualcosa di nuovo.
In realtà all’inizio ero stato attirato dal linguaggio Lava, creato dalla comunità Gnome, ma poi ho trovato un post in cui uno degli autori ammetteva che come linguaggio era pieno di bug e che non avevano la volontà e le energie per portarlo avanti. Peccato, perchè sarebbe stato interessante e perchè moltissimi progetti Gnome al momento sono scritti in Lava, per esempio: Geary e LaTeXila. I progetti che ho citato sono carini, scritti bene, mi chiedo cosa ne sarà di loro.
Devo ammettere che il pericolo che si cela spesso dietro il software libero è legato alla caratteristica di cui tutti i programmatori si gloriano: la curiosità. Partono entusiasti ma quando vedono un’altra luce, più brillante, lasciano tutto a metà strada, buttano via migliaia di ore di lavoro loro e degli altri, e vanno via.
Ecco dunque perchè ho pensato che sarebbe stato meglio dedicare il tempo a python, che come linguaggio difficilmente morirà tanto facilmente e al bridge creato con le Gtk, perchè dopo tanto web ho bisogno di creare qualcosa per desktop.

Ed ecco il primo pezzetto di codice fra tutti tanto per cominciare a muovere le mani:


import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class MyWindow(Gtk.Window):

def __init__(self):
Gtk.Window.__init__(self, title="Ciao Fabio")
self.button = Gtk.Button(label="Click Me")
self.button.connect("clicked", self.on_button_clicked)
self.add(self.button)

def on_button_clicked(self, widget):
print("Ciao Fabio!!!")

win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

Premetto che il codice che scriverò sarà eseguito su python3 e che al momento sto lavorando su di una macchina ubuntu la quale nella installazione di default fornisce python3 e il bridge Gtk3 per python.

Questo piccolo programma è molto semplice ma ha al suo interno diversi elementi importanti.
Le prime tre righe servono a importare la libreria Gtk versione 3.

In seguito si definisce la classe MyWindow che estende la classe Gtk.Window. Questo piccolo passo è importante perchè la libreria funziona estendendo una classe base e attraverso l’ereditarità la classe figlia si ritroverà a possedere tutti i metodi e le proprietà della classe padre.

All’interno della classe MyWindow definiamo due metodi.
Il primo metodo è il costruttore, che alla prima riga non fa altro che chiamare il costruttore della classe padre, quindi crea un bottone, collega l’evento clicked del bottone al secondo metodo della classe ed in fine lo aggiunge alla finestra.
Il secondo metodo come dicevo è il metodo che si collega all’evento clicked del bottone appena creato nel costruttore.
Questo non fa altro che scrivere la stringa “Ciao Fabio!!!” sulla console.

Veniamo alla parte finale, quella che attiva effettivamente tutto.
La prima cosa che faccio è creare una istanza della classe.
Poi collego l’evento “delete-event” al metodo Gtk.main_quit. Questo serve a fare in modo che quando l’utente clicca il bottoncino a croce sulla finestra l’applicazione si chiuda.
A questo punto invoco il metodo win.show_all che fa in modo che la finestra appaia sullo schermo ed in fine il metodo Gtk.main() che fa in modo che l’applicazione entri nel loop principale e rimanga in ascolto per gli eventi.

Sembra un programmino piccolo, ma è insidioso perchè contiene molti concetti che vanno obbligatoriamente visti insieme per far in modo che tutto funzioni.

Spero questa introduzione vi sia piaciuta, saluti!


25 anni di linux

Oggi è il 25° compleanno di Linux. Quanto tempo è passato da quella email scritta da quel giovane studente che giocava a fare un sistema operativo con il suo 386. E pensare che quel sistema ad oggi sta nelle tasche, nei router, nei server e presto nei tostapane di quasi ognuno di noi. Ben fatto […]


Framework o non framework?

Ormai è diventata una domanda fastidiosa. Ogni volta che inizio un nuovo progetto questa domanda riappare e la situazione ultimamente è peggiorata. Una volta questa domanda, in una applicazione web investiva solo il lato sviluppo, ora investe anche il lato interfaccia. Da quando è apparso Bootstrap tutto è cambiato, Bootstrap tutto risolve e tutto fa, […]


Da appendere di fianco allo schermo del computer di sviluppo

Ho trovato questa immagine questa mattina in rete e devo dire che mi è piaciuta subito. Considerato quello che leggo nella rete, e l’ignoranza che circonda tutto il mondo dell’SQL mi sono sentito in dovere di riproporla. Gli ORM ci hanno resi ignoranti, un informatico è un progettista e un progettista non sposa religioni, teorie […]


John Baskerville

John Baskerville rientra certamente nella lista dei grandi uomini. Ammiro profondamente il suo lavoro. A metà diciottesimo secolo, insoddisfatto del font Caslon, che era anche questo un ammirabile lavoro ma ormai era vecchio di due secoli, ripensa tutta la tipografia partendo dalle basi. Studia metodi per fare una carta migliore che permetta di stampare meglio, […]


Font web safe

Quando si lavora su di un sito e si deve scegliere il font giusto si passa sempre attraverso grandi dubbi. I font che sono contenuti nei nostri sistemi al momento dell’acquisto non sono poi molti ed è difficile fare una scelta che rispecchi la natura del sito. E’ vero che Google, Font squirrel e altri […]


Misteri di javascript jQuery e cicli

Ci sono cose che spesso lasciano il programmatore un pochino sorpreso se non allibito. Stavo provando ad attivare gli elementi di una checklist utilizzando javascritp e jquery. La checklist era in un normalissimo form html con un codice che non riporto integralmente ma che ricalca il senguente: <input name=”people” type=”checkbox” value=”aaaaa” />Primo elemento <input name=”people” […]


Apostrofi e java

Oggi ho perso due ora per stare dietro a questa cosa e quindi mi va di condividerla. E’ incredibile quanti scherzi un linguaggio possa tirarti anche dopo anni di fruttuoso utilizzo. Mettiamo che in una stringa java vogliate sostituire un aportrofo ‘ con un backslash seguito da un apostrofo. Come si fa? String replacedString = […]


Un classe per fare i bottoni per SpriteKit

Devo ammettere che con Sprite Kit Apple ha preso quasi tutto c’era di buono in cocos 2d. Apple presta molta attenzione nel creare un ambiente fruttuoso per i programmatori e Sprite Kit va certamente in questa direzione. Aspetto (e spero) che google facca lo stesso con Android ma non sono molto fiducioso. Una degli aspetti […]


Una marea di documentazione per Tex e LaTeX

Ogni tanto, per fortuna si trova gente davvero innamorata di quello che fa. Questo è il caso di Enrico Gregorio che svolge l’attività di insegnante e ricercatore nell’università di Verona. La quantità di materiale da lui pubblicata è tantissima, potrete trovarne un indice in questa pagina. Dato che si sta parlando di LaTex non posso […]