Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Tkinter

Tkinter è una delle librerie più utilizzate per l'implementazione di interfacce grafiche (GUI) utilizzando il linguaggio di programmazione Python.
Tkinter è una delle librerie più utilizzate per l'implementazione di interfacce grafiche (GUI) utilizzando il linguaggio di programmazione Python.
Link copiato negli appunti

In questa lezione esploreremo le peculiarità di TKinter, una libreria essenziale per la creazione di GUI con Python, e PAGE, uno strumento per la generazione automatica di interfacce grafiche con Tkinter.

Tkinter nasce come wrapper per le librerie grafiche Tcl/Tk, che sono, ad oggi, parte integrante di Python. Prima di iniziare a osservare da vicino le caratteristiche di Tkinter, è bene tenere sempre a mente i riferimenti alla documentazione ufficiale, disponibile sia per Python 2.x che per Python 3.x.

Utilizzo

Per importare il modulo Tkinter, è necessario procedere con la seguente import, dipendente dalla versione di Python installata:

from sys import version_info
if version_info.major == 2:
    # Python 2.x
    from Tkinter import *
    from Tkinter.ttk import *
elif version_info.major == 3:
    # Python 3.x
    from tkinter import *
    from tkinter.ttk import *

I moduli di Tkinter per Python 3.x sono retrocompatibili con quelli della versione 2.x. Sarà dunque sufficiente utilizzare la import di cui sopra per rendere le nostre interfacce perfettamente compatibili tra le due versioni di Python. Il modulo
"ttk" è un'estensione di Tkinter, detta "libreria tematica", di cui parleremo a breve.

Procediamo adesso con la scrittura del solito file "Hello world" e verifichiamo che Tkinter funzioni correttamente. Creiamo un file nominato hello.py, e copiamo-incolliamo il seguente codice:

#rimpiazzare questo commento con la import su indicata
ro = Tk()
w = Label(ro, text="Hello world")
w.pack()
ro.mainloop()

Eseguiamo il comando python hello.py. Se tutto funziona correttamente, dovremmo visualizzare la seguente finestra:

Figura 1. Hello world con Tkinter (click per ingrandire)

Hello world con Tkinter

Widget

I widget di Tkinter sono numerosi ed elencati nella seguente tabella, che li raggruppa in base alla categoria:

Categoria Nome Descrizione
Base Tk Il contenitore di tutti widget
grafici istanziati dalla nostra applicazione. Istanzia una finestra generica
Toplevel Rappresenta una finestra generica, separata da Tk,
ma comunque dipendente da esso. Tale componente è utilizzabile
per creare applicazioni multi-finestra
Frame Consente di raggruppare gli oggetti delle finestre.
Non ha un corrispettivo "fisico", e va interpretato come un componente
"logico" della finestra. Ciascuna finestra potrà essere composta da diversi frame
Button Un semplice bottone cliccabile
Checkbutton Bottone per l'inserimento di una spunta (checkmark)
Entry Una casella di testo a linea singola editabile
Label Un semplice testo non editabile
Listbox Una lista di opzioni testuali, tutte contemporaneamente visibili
Optionmenu Simile al precedente, ma trattasi di menu di tipo "popup"
Photoimage Utilizzato per mostrare immagini
Radiobutton Bottone di tipo "radio" a selezione singola
Scale Implementa uno slider
Decorati Canvas Crea un'area di disegno.
Le primitive che mette a disposizione consentono di disegnare archi, immagini
bitmap, linee, ovali, poligoni, rettangoli, testi.
Tutte le primitive sono personalizzabili in termini di colore e dimensioni
Text Testo multilinea, consente di gestire il font o il
colore. Può essere utilizzato ad esempio per
implementare un semplice editor di testo
Compositi Menu Menu a comparsa che
consente di inserire etichette testuali ed associarle a funzioni da
eseguire quando l'etichetta viene cliccata
Menubutton La porzione di un Menu che viene sempre
mostrata sull'interfaccia grafica. Cliccare sulla sua etichetta
testuale consentirà di visualizzare il Menu ad essa associato
Scrollbar Barra utilizzata congiuntamente ad una Listbox,
Canvas oppure Text.
Consente di scorrere verticalmente/orizzontalmente il componente ad essa associato

Con l'introduzione delle librerie tematiche Tk/Tcl 8.5, sono stati aggiunti alcuni componenti tematici che aumentano le potenzialità di Tkinter. Bisogna premettere che alcuni dei componenti della libreria "tematica" sovrascrivono i componenti della libreria classica, migliorandone l'aspetto. Per potere utilizzare la libreria tematica e sovrascrivere i vecchi componenti della libreria Tkinter, basterà utilizzare l'import precedentemente indicato. Qualora desiderassimo utilizzare i vecchi componenti di Tkinter, sarà sufficiente commentare le due linee contenenti le import ai componenti "ttk":

#from Tkinter.ttk import *
#from tkinter.ttk import *

I componenti di ttk sono in tutto 17, di cui 11 già esistenti in Tkinter. Rispetto ai componenti della vecchia versione, avremo quindi a disposizione 6 nuovi componenti, qui di seguito elencati:

Categoria Nome Descrizione
Tematici Combobox Combinazione di un Entry e un menu drop-down
Notebook Strumento utile per gestire applicazioni multifinestra.
L'aspetto è quello di un pannello che consente di selezionare la finestra tra diverse "schede"
Progressbar Una barra di completamento per mostrare l'avanzamento di un task
Separator Un separatore da utilizzare per visualizzare i bordi dei widget
Sizegrip Consente di scalare le dimensioni della GUI. Usualmente viene
mostrato in basso a destra nella finestra principale
Treeview Visualizza una gerarchia di oggetti,
dove ciascuno avrà associato una label testuale,
un'immagine opzionale ed una lista di attributi

Layout manager

Al fine di posizionare i widget all'interno delle finestre della GUI, dovremo utilizzare un layout manager. Tkinter ne mette a disposizione tre:

  • pack: consente di elencare in sequenza gli oggetti da disporre nella nostra GUI. L'ordine di visualizzazione è identico all'ordine con cui vengono registrati tramite l'istruzione pack();
  • grid: consente di posizionare gli oggetti all'interno di una griglia 2-D.
    Gli oggetti vengono posizionati tramite l'utilizzo dell'istruzione grid(), indicando
    numero di riga e di colonna;
  • place: consente di indicare la posizione assoluta/relativa degli oggetti all'interno della GUI.
    Utilizza l'istruzione place().

L'unica avvertenza da tenere a mente è che i layout non vanno MAI mescolati
nella stessa applicazione. Il più semplice e rapido da utilizzare è il layout "grid",
mentre il più preciso è il layout "place".

PAGE: un IDE per la creazione di interfacce grafiche con Tk/Tcl

PAGE (Python Automatic GUI Generator) è una
IDE Drag and Drop per la semplificazione del processo di creazione delle interfacce grafiche in Python. Compatibile con Python 2.7 e versioni successive, fornisce il supporto per i widget classici e tematici. È disponibile tramite licenza GNU.

Per la sua installazione sarà sufficiente scaricarlo da
Sourceforge
.

Utilizzando Ubuntu 16.04, scarichiamo l'archivio ".tgz" ed estraiamone il contenuto in una cartella denominata "page".
Dopodichè aprendo il terminale, dalla directory scompattata digitiamo il comando per la configurazione ./configure.

A questo punto, digitando il comando ./page, si aprirà l'IDE:

Figura 2. Interfaccia grafica di PAGE (click per ingrandire)

Interfaccia grafica di PAGE

Da questo momento in poi potremo riempire il nostro Toplevel con tutti i widget che desideriamo, utilizzando la widget toolbar, e
cambiando le impostazioni dall'attribute editor.

Potremo testare velocemente l' interfaccia, cliccando sul pulsante Gen_Python -> Generate support module, e salvando il modulo di supporto in formato "tcl". Dopodichè clicchiamo su Gen_python -> Generate Python GUI, ed eseguiamo l'interfaccia con Run:

Figura 3. Esecuzione dell'interfaccia generata da PAGE (click per ingrandire)

Esecuzione dell'interfaccia generata da PAGE

Il codice Python, generato automaticamente, verrà salvato all'interno della cartella dalla quale abbiamo eseguito PAGE.

Ti consigliamo anche