
L’autocompletamento è sicuramente una delle funzionalità più utili per velocizzare l’uso dei nostri software ai nostri utenti. Basti vedere quanto è utile avere una lista delle possibili parole chiave ricercate quando utilizziamo un motore di ricerca.
Vediamo come realizzare una semplice completition, per un entry, scritta in pygtk.
Analizziamo il codice saltando le funzioni tipiche e basilari del linguaggio per concentrarci su quelle di nostro interesse.
Dalla riga 9 alla riga 12 abbiamo creato la nostra finestra e ci abbiamo collocato all’interno la nostra entry. Nella riga 13 si nota l’istanza per una completition. Una gtkCompletition è un oggetto ausiliare da usare in combinazione con una entry. Esso si occupa di creare il popup contenente le stringhe utili da poter poi gestire e mostrare all’interno dell’oggetto a cui esso è connesso. Nella riga successiva, 14, c’è, invcece, l’istanza per una liststore. Essa non è altro che un contenitore che si occuperà di contenere dei dati del tipo definito dal costruttore. Nel nostro caso i dati al suo interno saranno stringhe poichè al costruttore è stato passato come argomento str. Le righe 15–17 rappresentano un ciclo for che si occupa di riempire la liststore, precedentemente creata, con un passaggio iterativo dei dati contenuti in una lista. Ciò viene fatto poichè, come detto, la liststore è costruita in modo tale da contenere stringhe e perciò ogni elemento prelevato dalla nostra lista è di per sè una stringa se preso singolarmente. La riga 18 ci dice che la completition viene riempita con i dati presenti nella liststore mentre la 19 connette la completition al rispettivo metodo della nostra entry. La riga 20, come facilmente intuibile, setta una caratteristica della completition, le colonne. la riga 21, se analizzata con attenzione, mostra come un evento viene connesso alla entry in modo tale da richiamare, quando necessario, la funzione definita successivamente, autocompletamento. La riga 22 mostra il form creato.
Passiamo all’analisi della funzione autocompletamento. Come si vede essa ha due paramenti, il tradizionale self e la entry alla quale la stessa viene applicata. La riga 26 trasferisce il testo contenuto nella entry in una variabile di tipo testo e di nome text, l’if alla riga 27 controlla che tale stringa sia piena. Se text contiene qualche carattere allora c’è il controllo dell’if alla riga 28 che si occupa di ridefinire il contenuto della liststore con le stringhe filtrate con il contenuto della nostra entry.
Spero che l’analisi sia stata abbastanza dettagliata e possa essere utile a qualche sviluppatore. In caso di dubbi basta un commento.