Dialogo con Claude.
Guida a PySide6 per le prime applicazioni desktop
Introduzione
Python è ottimo per scrivere script, ma spesso si vuole qualcosa di più: una vera applicazione con finestre, pulsanti e menu. Qt è uno dei framework più completi per farlo. È maturo, multipiattaforma (Windows, macOS, Linux) e produce interfacce dall’aspetto nativo. Con Python lo si usa in poche righe, senza dover scrivere C++.
Perché proprio Python e Qt?
Python è oggi uno dei linguaggi più diffusi al mondo, grazie a una sintassi leggibile e a un ecosistema di librerie che copre dall’analisi dei dati all’intelligenza artificiale. Qt, dal canto suo, offre da anni un toolkit grafico solido e multipiattaforma.
Unirli significa dare un volto a ciò che Python sa già fare: un’analisi di dati diventa una dashboard interattiva, uno script di misura diventa un’applicazione che chiunque può usare con un clic. Python porta rapidità di sviluppo e librerie, Qt porta widget curati e un’esperienza d’uso professionale. Per chi comincia è un ottimo modo di passare dalla riga di comando a un programma “vero”.
PySide6 o PyQt6?
Qt non nasce per Python, quindi servono dei binding, cioè librerie che lo rendono utilizzabile da Python. I due principali sono:
- PySide6: il binding ufficiale del Qt Project, con licenza LGPL. Si può usare anche in progetti commerciali senza pagare, rispettando le condizioni della licenza.
- PyQt6: sviluppato da Riverbank Computing, con licenza GPL o commerciale.
L’API è quasi identica, quindi il codice si porta facilmente da uno all’altro. Per iniziare consiglio PySide6, e in questo articolo useremo quello. L’installazione richiede un solo comando:
bash
pip install PySide6
Primo esempio: un pulsante
Cominciamo con il programma più semplice possibile:
python
import sys
from PySide6.QtWidgets import QApplication, QPushButton
app = QApplication(sys.argv)
button = QPushButton("Cliccami!")
button.show()
sys.exit(app.exec())
Cosa succede:
QApplicationgestisce l’applicazione e ne è il punto di partenza.QPushButtonè un widget, cioè un elemento grafico. Se non ha un genitore, appare come finestra.app.exec()avvia il ciclo degli eventi, che resta in ascolto di clic, tasti e altre azioni finché non si chiude la finestra.
Segnali e slot
Un pulsante che non fa nulla non serve a molto. In Qt gli oggetti comunicano tramite segnali (qualcosa è successo) e slot (cosa fare in risposta). Basta collegarli con connect:
python
import sys
from PySide6.QtWidgets import QApplication, QPushButton
def saluta():
print("Ciao dal pulsante!")
app = QApplication(sys.argv)
button = QPushButton("Cliccami!")
button.clicked.connect(saluta)
button.show()
sys.exit(app.exec())
Il segnale clicked viene emesso a ogni clic e Qt richiama la funzione saluta. Lo slot può essere una qualsiasi funzione o metodo Python. Questo meccanismo è alla base di qualsiasi interfaccia Qt.
Qt Designer e QML
Costruire tutta l’interfaccia a mano diventa presto faticoso. Esistono due alternative:
- Qt Designer: un editor visuale in cui si trascinano i widget. Salva un file
.ui, che si carica dal codice o si converte in Python conpyside6-uic. Si avvia conpyside6-designer. - QML: un linguaggio dichiarativo pensato per interfacce moderne e fluide, con animazioni e touch. Ha una curva di apprendimento maggiore, ma è la direzione in cui Qt sta investendo di più.
Per i principianti consiglio di partire dai widget e da Designer, e di guardare QML in un secondo momento.
Il prezzo da pagare: Python contro C++
Finora abbiamo visto i vantaggi, ma sarebbe scorretto tacere i compromessi. Un programma Qt scritto in C++ viene compilato in un eseguibile nativo, compatto e veloce a partire. Python è interpretato: per distribuire l’applicazione bisogna includere l’interprete e le librerie, con un risultato più pesante e meno “puro”. In cambio si ottengono rapidità di sviluppo e codice più breve. Per un’applicazione desktop comune il compromesso conviene, perché la parte grafica resta comunque in codice compilato. Se servono prestazioni estreme o un binario minimale, C++ è la scelta giusta, e strumenti come Nuitka, che traduce il Python in C, possono ridurre il divario.
Lo stesso vale, in modo ancora più netto, per altri ambiti. Non aspettiamoci di trovare Python nel cruscotto di un’auto. Lì Qt vive in C++ e QML, dove contano tempi di avvio, memoria e affidabilità. Python occupa un altro spazio: prototipi rapidi, strumenti interni, software scientifico e applicazioni desktop dove la produttività di chi sviluppa pesa più dei millisecondi. Sono due usi diversi dello stesso framework, e molti progetti li combinano, con l’interfaccia in QML e la logica in Python durante lo sviluppo.
Conclusioni
Python e Qt permettono di passare da uno script a un’applicazione desktop completa con pochissimo codice. Non sono la scelta giusta per ogni scenario, ma per prototipi, strumenti professionali e applicazioni scientifiche sono un’accoppiata difficile da battere. Dopo il primo pulsante, il passo naturale è imparare i layout (QVBoxLayout, QHBoxLayout) per organizzare più widget nella stessa finestra.
Risorse utili
- Documentazione ufficiale: Qt for Python su doc.qt.io
- Il sito pythonguis.com, con molti tutorial per principianti