Una semplice interfaccia grafica con Python e TKinter

Stanchi di dover stampare tutto sulla console del nostro Python? Volete aggiungere un po’ di grafica ai vostri software? Con Python è semplicissimo e non serve scomodare grandi risorse poiché inserire bottoni e relative funzioni è semplice ed intuitivo anche da codice.

Diamo un’occhiata al codice qui riportato e commentato. Seguiranno altri script esemplificativi con grado di difficoltà crescente. Al lettore sperimentare e modificare lo script per meglio comprendere le possibilità. 

Ovviamente, questo codice non può essere provato su Repl.it o altri ide online. Tocca sperimentarlo su un ide in locale come PyCharm o un semplice IDLE.

Inizializzazione dell’ambiente

import tkinter as tk

#inizializziamo globalmente la finestra
window = tk.Tk() 
window.geometry("500x500")
window.title("GUI con TkInter!")

Possiamo opzionalmente aggiungere degli elementi di interesse come la possibilità di ridimensionare la finestra o meno e altre configurazioni come il colore di sfondo.

# window.resizable(False, False)
# window.configure(background="white")

Il codice per coerenza lo inseriamo all’interno del flusso principale main. Da ricordare però è che dopo l’inizializzazione, si cominceranno ad inserire gli elementi grafici ma alla fine bisogna necessariamente invocare il loop window.mainloop() dell’interfaccia che mantiene la finestra attiva.

Bottoni

Come primo esempio esempio non abbiamo pretese di grafiche avanzate ma ci limitiamo ad inserire e capire come funzionano i bottoni. Ne proviamo a creare due, first_button e second_button.

Il primo parametro text è intuitivo, indica il testo che appare sul bottone. Fondamentale è il parametro command che richiama una funzione specifica dove inseriamo il codice da scatenare al click sul bottone.

    first_button = tk.Button(text="Hello!", command=firstprint)
    first_button.grid(row=0, column=0, sticky="W")

    second_button = tk.Button(text="Altro bottone", command=secondprint)
    second_button.grid(row=1, column=0, padx=5, pady=10, sticky="W")

Il metodo grid crea una sorta di griglia righe/colonne per allineare gli oggetti anche senza un editor grafico. L’opzione “sticky” può assumere i valori N, S, E, W per allineare, mentre pady è il padding verticale della cella per mettere un po’ di spazio tra i bottoni. Analogamente padx, il riempimento orizzontale. Prova a modificare i valori per vedere come varia la finestra.

Label

L’idea alla base del nostro test è modifica e far apparire un testo all’interno di una etichetta utilizzando la griglia proposta per farlo apparire a fianco del bottone stesso. Approfittiamo per vedere qualche parametro magari non sempre realistico ma pur sempre utile, come colore e font.

def firstprint():
    text = "Hello World!"
    text_output = tk.Label(window, text=text, fg="red", font=("Arial", 16))
    text_output.grid(row=0, column=1, sticky="W")

Il codice completo

import tkinter as tk


#dichiariamo le funzione scatenate al click
#potremmo metterle in un file a parte e suddividere grafica da logica?
def firstprint():
    text = "Hello World!"
    text_output = tk.Label(window, text=text, fg="red", font=("Arial", 16))
    text_output.grid(row=0, column=1, sticky="W")

def secondprint():
    text = "Un altro messaggio!"
    text_output = tk.Label(window, text=text, fg="green", font=("Arial", 16))
    text_output.grid(row=1, column=1, padx=50, sticky="W")

if __name__ == "__main__":
    #inizializziamo globalmente la finestra
    window = tk.Tk() 
    window.geometry("500x500")
    window.title("GUI con TkInter!")

    #creiamo i bottoni
    first_button = tk.Button(text="Hello!", command=firstprint)
    first_button.grid(row=0, column=0, sticky="W")

    second_button = tk.Button(text="Altro bottone", command=secondprint)
    second_button.grid(row=1, column=0, padx=5, pady=10, sticky="W")
    
    window.mainloop()

Ultima modifica 18 Ottobre 2023