Skip to content

Interfacce grafiche con Tkinter

Perché ti serve Tkinter per le interfacce grafiche

Section titled “Perché ti serve Tkinter per le interfacce grafiche”

Finora i tuoi programmi comunicano con l’utente tramite il terminale: testo che appare e testo che viene scritto. Con Tkinter puoi creare vere finestre grafiche con pulsanti, campi di testo, menu a tendina — come i programmi che usi ogni giorno.


Tkinter è la libreria per creare interfacce grafiche già inclusa in Python. Non devi installare nulla. Permette di creare finestre con tutti i classici elementi: etichette, pulsanti, caselle di testo, caselle di spunta, e molto altro.


import tkinter as tk
# Crea la finestra principale
root = tk.Tk()
root.title("La mia prima finestra")
root.geometry("400x300") # larghezza × altezza in pixel
# Avvia il "loop degli eventi" — mantiene la finestra aperta e risponde ai click
root.mainloop()

Il metodo mainloop() è fondamentale: è il ciclo che mantiene la finestra in vita e reagisce a tutto ciò che l’utente fa (click, digitazione, ecc.).


In Tkinter, ogni elemento visibile si chiama widget.

import tkinter as tk
root = tk.Tk()
# Crea un'etichetta di testo
etichetta = tk.Label(root, text="Ciao, mondo!", font=("Arial", 16))
etichetta.pack(pady=20) # pack() posiziona il widget nella finestra
root.mainloop()

import tkinter as tk
def saluta():
print("Ciao!") # Questa funzione viene chiamata al click
root = tk.Tk()
pulsante = tk.Button(root, text="Clicca qui!", command=saluta)
pulsante.pack(pady=20)
root.mainloop()

command=saluta indica quale funzione chiamare quando il pulsante viene premuto.


import tkinter as tk
root = tk.Tk()
# Crea un campo dove l'utente può scrivere
campo = tk.Entry(root, width=30)
campo.pack(pady=10)
def leggi_input():
testo = campo.get() # Leggi il testo scritto dall'utente
print(f"Hai scritto: {testo}")
pulsante = tk.Button(root, text="Leggi", command=leggi_input)
pulsante.pack()
root.mainloop()

Metti insieme Label, Entry e Button per fare una piccola app interattiva:

import tkinter as tk
def saluta():
nome = campo_nome.get()
if nome:
etichetta_risultato.config(text=f"Ciao, {nome}!")
else:
etichetta_risultato.config(text="Inserisci un nome!")
root = tk.Tk()
root.title("App di saluto")
root.geometry("300x200")
# Istruzione per l'utente
tk.Label(root, text="Inserisci il tuo nome:").pack(pady=10)
# Campo di testo
campo_nome = tk.Entry(root, width=25)
campo_nome.pack()
# Pulsante
tk.Button(root, text="Saluta", command=saluta).pack(pady=10)
# Etichetta per mostrare il risultato (inizialmente vuota)
etichetta_risultato = tk.Label(root, text="", font=("Arial", 14))
etichetta_risultato.pack()
root.mainloop()

Posizionare i widget in griglia con grid()

Section titled “Posizionare i widget in griglia con grid()”

pack() mette i widget uno sotto l’altro. Con grid() puoi posizionarli in una tabella di righe e colonne — utile per form o calcolatrici:

import tkinter as tk
root = tk.Tk()
root.title("Calcolatrice semplice")
# Riga 0: etichetta e campo per il primo numero
tk.Label(root, text="Primo numero:").grid(row=0, column=0, padx=5, pady=5)
campo_a = tk.Entry(root)
campo_a.grid(row=0, column=1)
# Riga 1: etichetta e campo per il secondo numero
tk.Label(root, text="Secondo numero:").grid(row=1, column=0, padx=5, pady=5)
campo_b = tk.Entry(root)
campo_b.grid(row=1, column=1)
def calcola():
try:
a = float(campo_a.get())
b = float(campo_b.get())
etichetta_ris.config(text=f"Somma: {a + b}")
except ValueError:
etichetta_ris.config(text="Inserisci numeri validi!")
# Riga 2: pulsante che occupa entrambe le colonne
tk.Button(root, text="Somma", command=calcola).grid(row=2, column=0, columnspan=2, pady=10)
# Riga 3: etichetta risultato
etichetta_ris = tk.Label(root, text="")
etichetta_ris.grid(row=3, column=0, columnspan=2)
root.mainloop()

import tkinter as tk
root = tk.Tk()
# Text: area di testo su più righe (come un piccolo editor)
area = tk.Text(root, height=5, width=30)
area.pack()
# Checkbutton: casella di spunta
var_check = tk.BooleanVar()
check = tk.Checkbutton(root, text="Accetta i termini", variable=var_check)
check.pack()
# Radiobutton: scelta esclusiva tra opzioni
var_radio = tk.StringVar(value="mela")
for frutto in ["mela", "banana", "uva"]:
tk.Radiobutton(root, text=frutto, variable=var_radio, value=frutto).pack()
# Scale: cursore scorrevole
cursore = tk.Scale(root, from_=0, to=100, orient=tk.HORIZONTAL)
cursore.pack()
root.mainloop()

Tkinter ha anche finestre di dialogo già pronte — quelle che compaiono davanti alla finestra principale con un messaggio o una domanda:

import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
def mostra_info():
# Finestra di informazione con un solo pulsante OK
messagebox.showinfo("Info", "Operazione completata!")
def chiedi_conferma():
# Finestra con pulsanti Sì e No
risposta = messagebox.askyesno("Conferma", "Sei sicuro di voler uscire?")
if risposta:
root.quit() # Chiudi il programma
tk.Button(root, text="Mostra info", command=mostra_info).pack(pady=5)
tk.Button(root, text="Esci", command=chiedi_conferma).pack(pady=5)
root.mainloop()