[Da Wikipedia]In programmazione, Qt è una libreria multipiattaforma per lo sviluppo di programmi con interfaccia grafica tramite l'uso di widget (congegni o elementi grafici). Qt, ampiamente utilizzato nell'ambiente desktop KDE per Linux, è stato sviluppato dall'azienda Qt Software (meglio conosciuta come Trolltech o Quasar Technologies)... Qt usa il linguaggio C++ standard [...] ma esistono interfacce per Java, Python, C, Perl e PHP. Gira sulle piattaforme principali... [Fine citazione]
widget
PyQt è dunque l'interfaccia Python di Qt. Di fatto, PyQt è solo un wrapper verso le procedure Qt scritte in C++; questo si vede molto bene nella documentazione delle classi, che spesso non è stata neppure adattata a Python, ma conserva impostazione e soprattutto esempi presi dal Qt in C++ ; vedi per esempio la documentazione della classe QVBoxLayout WEB.
QVBoxLayout
Dopo un brevissimo riepilogo di alcuni concetti generali, per il resto questa introduzione si dipanerà attraverso la presentazione e la discussione di alcuni esempi. I sorgenti verranno copiati da questa pagina Web in un editor di testo (o in Idle), eventualmente modificati e lanciati in esecuzione.
Rapid GUI Programming with Python and Qt
La parola widget origina dalla contrazione dei termini window e gadget. Qt ha radici molto antiche; alcuni widget (vedi QLCDNumber, WEB) provengono addirittura dal Basic del Sinclair ZX Spectrum (1982: WEB).
window
gadget
event-driven
Qt / PyQt, come (credo) tutte le librerie per lo sviluppo di interfacce grafiche, si basa su un paradigma di programmazione ad eventi. Concepire i propri programmi per una modalità di funzionamento ad eventi rappresenta probabilmente una delle maggiori difficoltà concettuali che si incontrano per passare da una programmazione a linea di comando ad una programmazione controllata da una interfaccia grafica.
ad eventi
programmi event-driven
La programmazione ad eventi si avvale in modo sostanziale dell'architettura offerta dalla programmazione ad oggetti. Per seguire senza troppe difficoltà questa introduzione a PyQt, sarebbe bene quindi avere ben chiari i concetti base della OOP e in particolare i concetti di: classe, istanza, ereditarietà, metodo, proprietà.
È importante capire bene (e soprattutto non confondere) la relazione genitore-figlio relativa alle classi e quella proprietario-posseduto relativa agli oggetti istanziati. La documentazione usa il termine parent in entrambi i casi; nel secondo caso secondo me sarebbe preferibile utilizzare il termine owner e mi sforzerò di farlo.
genitore-figlio
proprietario-posseduto
parent
owner
top-level widget
top-level
posseduti
detached
layoutName.addWidget(widgetName)
self.setLayout(layoutName)
button
pulsanti
terzoLayoutName.addLayout(layoutName)
terzoLayoutName.addWidget(widgetName)
self.setLayout(terzoLayoutName)
QGroupBox
groupboxName.setLayout(layoutName)
layoutName.addWidget(groupboxName)
a griglia
gridlayoutName.addWidget(widgetName,row,col,rowspan,colspan)
embedded
ad oggetti
proprietario
metodi
slot
eventi
signals
fileName=QFileDialog.getOpenFileName(self,"Titolo", "Initial_dir","Tipi di file (*.ex1 *.ex2 *.ex2)") if fileName: utilizza_il_nome_del_file else: NON_utilizza_il_nome_del_file
fileName=QFileDialog.getSaveFileName(self,"Titolo", "Initial_dir","Tipi di file (*.ex1 *.ex2 *.ex2)") if fileName: utilizza_il_nome_del_file else: NON_utilizza_il_nome_del_file
r=QMessageBox.question(self,"Titolo", "Prompt",QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if r==QMessageBox.Yes: fai_qualcosa else: fai_qualcosaltro_o_niente
live
apparentamento
central widget
built-in
Ritorna alla pagina indice
Daniele Andreuccetti, IFAC-CNR, giugno 2015