Nel corso del mio lavoro di scienziato mi e' capitato di dover sviluppare interfaccie grafiche a programmi scritti da me o da qualcun altro. La prima che sviluppai fu in IDL (per dirla all'ammericana... a pain in the 455!)
Poi mi sono avvicinato alle librerie wx, attratto dalla loro portabilita' e dal fatto di poterle utilizzare con Python. Programmare con le wx mi ha dato parecchie soddisfazioni, ma mai quanto programmare con PyQt4!
Come si fa?
Ora vi mostro come essere operativi da subito!
Realizzeremo un software minimale, in grado di accettare parametri di input e rielaborarli, presentando il risultato ottenuto all'utente!
Posto che le librerie siano installate, aprite qt4 designer:
/usr/lib/qt4/bin/designer # per mandriva
Se designer vi apre una marea di finestre e non vi piace potete usare la modalita' "docked windows" (si setta da un dialogo che si apre dal menu' della finestra principale: "Edit->Preferences...").A questo punto create un nuovo Form dal menu' file. Per questo tutorial scegliamo la strada della comodita': scegliete "Dialog with buttons: bottom" (vedi Fig. 1)!
Se tutto e' andato bene dovreste avere qualcosa di simile a quanto mostrato in figura 2... Ora siete pronti a lavorare sul serio!
Come vedete a sinistra ci sono elementi per creare la parte grafica della nostra applicazione. Mettiamone uno per l'input (il LineEdit) e uno per l'output, un text browser (Fig. 3):
Come vedete fa schifo! Ma non e' un problema! Basta
cliccare su una parte vuota del dialog e poi sul bottone "Lay Out Vertically"... Gia' questo e' sufficiente per ottenere un risultato piu' che gradevole (Fig.4)!
Salvatelo in una directory che vi piace con il nome di "myGui.ui" (o quello che vi pare...).
Bene! La parte grafica e' finita... anche se di Python, per ora, non c'e' neanche l'ombra!!!
Comincia la pythonificazione!!!!!
Ora dovrete trasformare la vostra applicazione in codice Python. Facilissimo, basta usare il comando:
pyuic4 myGui.ui -o myGui.py
e siete a posto! Se non trovate pyuic4 probabilmente dovrete installare le librerie di sviluppo di qt4 (per mandriva urpmi python-qt4-devel).Ora create un altro file chiamato myApp.py, che vi servira' per usare la GUI e per farle fare qualcosa di interessante.
Il motivo per cui e' comodo usare due file e' che se volete potete modificare la GUI con designer e poi riconvertirla in codice Python senza preoccuparvi di perdere del codice!
Nel file metteci questo codice:
#!/usr/bin/env pythonIl comando python myApp.py gia' dovrebbe presentarvi la vostra interfaccia, perfettamente funzionante: se cliccate sui pulsanti si chiudera'! E cosa doveva fare di piu'?!
from myGui import * # Importa la parte grafica
# La funzione che fa girare il programma
app = QtGui.QApplication([]) # Crea un'applicazione Qt, ...
Dialog = QtGui.QDialog() # ... un dialogo, ...
ui = Ui_Dialog() # ... e una user interface.
ui.setupUi(Dialog) # Infila il dialog nella user interface
def run():
Dialog.show() # mostra il dialog precedentemente creato
return app.exec_() # esegue l'applicazione ed esce dal
# programma ritornando lo stesso intero che ritorna app.exec_()
if __name__ == "__main__":
run()
Facciamo fare qualcosa di utile alla nostra applicazione!
Effettivamente il programma non e' stato istruito sulle azioni da compiere. La cosa piu' stupida che mi viene in mente e' copiare quello che mettiamo in input, rielaborarlo, e presentarlo come output. Modificate il codice come mostrato aggiungendo le righe in rosso.
#!/usr/bin/env python
from myGui import * # Importa la parte grafica
# La funzione che fa girare il programma
app = QtGui.QApplication([]) # Crea un'applicazione Qt, ...
Dialog = QtGui.QDialog() # ... un dialogo, ...
ui = Ui_Dialog() # ... e una user interface.
ui.setupUi(Dialog) # Infila il dialog nella user interface
# Reimpostiamo la gestione del bottone Ok
def action():
"""Quando Ok viene premuto ricopia il testo in grassetto nel textbrowser"""
ui.textBrowser.setText("%s" % ui.lineEdit.text())
app.disconnect(ui.buttonBox,QtCore.SIGNAL("accepted()"),Dialog.accept)
app.connect(ui.buttonBox,QtCore.SIGNAL("accepted()"),action)
def run():
Dialog.show() # mostra il dialog precedentemente creato
return app.exec_() # esegue l'applicazione ed esce dal
# programma ritornando lo stesso codice che ritorna app.exec_()
if __name__ == "__main__":
run()
Le righe in piu' ridefiniscono il comportamento del bottone Ok, facendogli eseguire il codice nella funzione "action".Facile no!
Adesso e' compito vostro far fare ai vostri programmi qualcosa di utile per voi e il modo della comunita' open source!
Se avete dubbi o suggerimenti per migliorare questo micro tutorial vi prego di contattarmi!
2 commenti:
E se uno fosse interessato al contrario da .py a .ui?
Ma da qualche parte nel mondo c'è come scrivere Dialog in PyQT4 a manina?
Onestamente, fa proprio schifo questa guida.
Posta un commento