dal 2015 - visita n. 896
TkInter
TkInter

 

1. Introduzione


1.1. Generalità

Queste note sono state stese durante un personale percorso di apprendimento, fatto utilizzando altre guide presenti in rete, citate nella webgrafia, rielaborandone ed adattandone i contenuti. Non contengono pertanto una descrizione esauriente di Tkinter e nemmeno pretendono di essere una guida introduttiva completa.

Tkinter (Tk-interface) è un wrapper (involucro) per Tk, un sottile strato di software orientato agli oggetti fondato su di esso. È la GUI di default di Python, Graphical User Interface (Interfaccia Grafica per l'Utente), ed è integrata in Python fin dalle sue origini. Ha notevoli doti di semplicità e portabilità, ottimi widget (lett. aggeggi) come canvas per la grafica strutturata, e text per l'editing avanzato del testo; ed è ben documentato sia in linea che in pubblicazioni cartacee. Anche se le interfacce ottenute hanno l'aspetto un po' datato, resta un'ottima scelta per costruire rapidamente interfacce semplici e portabili.

La programmazione di GUI è esattamente analoga ad ogni altro tipo di programmazione: sequenze di istruzioni, cicli, fasi condizionali e moduli. La differenza principale consiste nel fatto che nella programmazione di GUI normalmente viene usato un Toolkit (Insieme di attrezzi) ed occorre quindi seguire il modello di programmazione previsto da chi ha prodotto il toolkit. Ogni toolkit ha una sua API, Application Programmer's Interface (una libreria di funzioni specifiche) ed un proprio insieme di regole per la programmazione che il programmatore deve imparare e seguire. Poichè imparare un nuovo toolkit è generalmente più complicato che imparare un nuovo linguaggio di programmazione, è meglio sceglierne uno che funziona per vari linguaggi. Tk, tra l'altro, funziona per Tcl, Perl, Python, Ruby e Lisp.

Le applicazioni GUI sono quasi sempre di tipo ad eventi. Ogni programma ad eventi è strutturato come un ciclo che raccoglie gli eventi e li processa. Gli eventi possono essere generati dal sistema operativo, come accade nel caso di praticamente tutti i programmi di tipo GUI. Oppure può essere il programma stesso che va in cerca degli eventi, come accade nei sistemi di controllo embedded, tipo quelli usati nelle macchine fotografiche.



1.2. Un po' di vocabolario

La programmazione di GUI ha il proprio insieme di termini. I più comuni sono riportati nella seguente tabella:

 Descrizione
Window Finestra - Un'area dello schermo controllata da un programma. Le finestre sono normalmente rettangolari, ma alcuni ambienti GUI consentono altre forme. Le finestre possono contenere altre finestre e spesso ogni elemento di controllo grafico è a sua volta una finestra a pieno titolo.
Control Controllo - Dispositivo di comando associato ad una finestra, può essere visibile (es. widget) o non visibile (es. timer). Controlla l'applicazione, ha associate delle proprietà e normalmente genera degli eventi. A livello di programma, di solito gli elementi di controllo corrispondono ad oggetti e gli eventi sono associati a metodi dell'oggetto corrispondente, in modo che quando si verifica l'evento l'oggetto manda in esecuzione uno dei propri metodi. L'ambiente di programmazione GUI fornisce un meccanismo per legare gli eventi ai metodi.
Widget Aggeggio - Un elemento di controllo, corrispondente ad un elemento visibile, che può essere manipolato dall'utente o dal programmatore. Ecco i principali:

  • Frame (Cornice), serve a raggruppare altri widget.
    Spesso un frame rappresenta la finestra completa ed al suo interno vengono definiti ed inclusi altri frame.
  • Label (Etichetta)
  • Button (Pulsante)
  • Text Entry (Input Testo), serve ad immettere una singola riga di testo.
  • Text Box (Area Testo), serve ad immettere più righe di testo.
  • Message Box (Avviso), per la gestione interattiva di brevi messaggi indirizzati all'utente.
  • Radio Button (Pulsante Radio), per selezioni mutuamente esclusive.
  • Check Button (Pulsante Spunta), per selezioni additive.
  • Canvas (Tela), area per disegnare.
  • Image (Immagine), per la visualizzazione di immagini BMP, GIF, JPEG e PNG.
  • Listbox (Elenco), per gestire liste.
  • Menu/MenuButton (Pulsante Menu), per costruire menu.
  • Scale/Scrollbar (Indice/Barra di scorrimento), per indicare posizioni.
Layout Disposizione - Gli elementi di controllo vengono disposti all'interno di un frame seguendo un particolare modello di disposizione. La disposizione può essere specificata in molti modi: con le coordinate dello schermo in pixel, con la posizione relativa rispetto ad altri componenti (a sinistra, sopra, ecc.), oppure con una disposizione a griglia o a tabella.
Il sistema basato su coordinate è facile da comprendere ma difficile da utilizzare quando ad una finestra vengono cambiate le dimensioni, quindi andrebbe usato con finestre a dimensione fissa.
Child Figlio - I programmi GUI sono generalmente strutturati come una gerarchia di widget e altri elementi di controllo. Il frame di più alto livello, che coincide con la finestra dell'applicazione, contiene sotto-frame che a loro volta contengono altri frame o elementi di controllo.
Tutti questi elementi possono essere visualizzati sotto forma di una struttura gerarchica ad albero in cui ciascun elemento ha un solo padre ed un numero variabile di figli. Questa struttura viene di norma esplicitamente memorizzata all'interno dei widget in modo che il programmatore, o più comunemente lo stesso ambiente GUI, possa applicare una operazione ad un elemento di controllo ed a tutti i suoi figli.
Events Eventi - Sono segnali di input generati da: pressioni dei tasti della tastiera, pressioni dei tasti dei dispositivi di puntamento (mouse ed assimilati), movimenti dei dispositivi di puntamento (mouse ed assimilati), attivazione dei timer.
Event Loop Ciclo degli Eventi - E' quella parte di codice che attende la ricezione degli Eventi.
Event Handler Gestore di Evento - E' quella parte di codice che gestisce il segnale ricevuto come Evento, nel senso che reagisce ad esso.
Binding Collegamento - Così si chiama l'accoppiamento fra un gestore di eventi e un widget. Questo processo implica l'associazione di tre diverse entità:

  1. un tipo di evento (la pressione del tasto sinistro del mouse, o la pressione del tasto Invio sulla tastiera)
  2. un widget (uno dei pulsanti di un frame)
  3. un appropriato codice di gestione dell'evento

Un caso tipico può essere il collegamento di (1.) una singola pressione del tasto sinistro del mouse sul (2.) pulsante USCITA della finestra con il (3.) codice denominato uscitaProgramma che chiude la finestra e termina il programma.




1.3. Uno schema mentale

Quando si sviluppa una qualsiasi Interfaccia Utente o UI (User Interface) c'è un insieme standard di compiti da eseguire:

 Descrizione
Uno Specificare l'aspetto dell'interfaccia: scrivere il codice che determina ciò che l'utente vedrà sullo schermo (o in Modo Grafico o a Linea di Comando).
Due Decidere il funzionamento dell'interfaccia: scrivere il codice che realizza i compiti del programma.
Tre Collegare aspetto e funzionamento: scrivere il codice che associa ciò che l'utente vede con il codice per eseguire i compiti del programma.
Quattro Fissare il ciclo di attesa: scrivere il codice che rimane in attesa degli input dell'utente.

Il programma seguente propone un esempio (a Linea di Comando) di programmazione UI, mostrando in che modo i concetti base appena esposti possano essere realizzati in maniera estremamente semplice. Il programma presenta un menù sulla console ed attende l'input di un carattere dalla tastiera. In ogni caso, come è evidente, esso realizza i quattro compiti fondamentali della programmazione UI.

#!/usr/bin/env python
# -*- coding: iso8859-15 -*-

# Funzioni ausiliarie.
def clear():
    print "\n"*100                      # pulizia dello schermo

# Compito 1: definizione dell'interfaccia utente (aspetto sullo schermo)
def interfaccia():
    clear()
    print "                       IL SUPER QUIZ"
    print "==========================================================="
    print "Premere il tasto corrispondente alla risposta, poi [Invio]."
    print
    print "        A.  Animale"
    print "        B.  Vegetale"
    print "        C.  Minerale"
    print
    print "        X.  Termina il programma"
    print
    print "==========================================================="
    print "A quale regno appartiene il 'Lapislazzulo'?"
    print

# Compito 2:  definizione del codice di gestione degli eventi
def gestione_A():
    print "Sbagliato! Prova ancora!"

def gestione_B():
    print "Sbagliato! Prova ancora!"

def gestione_C():
    print "Corretto! Il lapislazzulo è una pietra!"

# Compito 3: associare gli eventi della tastiera 'interessanti'
# con i gestori di eventi. Una semplice forma di collegamento
def collegamento(r):
    if r == "A":
        gestione_A()
    if r == "B":
        gestione_B()
    if r == "C":
        gestione_C()
    if r == "X":
        clear()                         # pulizia dello schermo 
# Ogni altro evento è ritenuto non interessante e quindi ignorato

# Compito 4: ciclo degli eventi.
def eventi():
    while 1:                            # Attiva Ciclo infinito
        risp = raw_input().upper()      # Osserva il successivo ingresso
        collegamento(risp)              # Collegamento ai Gestori Eventi
        if risp == "X":                 # Condizione di uscita Ciclo
            break                       # termina il ciclo degli eventi

# Main Program
def main():
    interfaccia()
    eventi()

main()





Corso Base Linux
Asm Linux
Python
GnuPlot
TkInter
wxPython
py-qt4-designer



Saper rivivere con piacere il passato è vivere due volte.
Valerio Marziale

Valid CSS!
pagina generata in 0.001 secondi