Visualizzazione post con etichetta pyqt4 tutorial. Mostra tutti i post
Visualizzazione post con etichetta pyqt4 tutorial. Mostra tutti i post

qombinatorics

Nei giorni scorsi ho parlato spesso di calcolo delle probabilita', piu' specificatamente ho scritto di come calcolare la probabilita' di certi eventi al gioco delle carte.

I conti da svolgere non sono complicati, benche' spesso noiosi. Siccome non sopporto la noia ho pensato bene di sviluppare un programma che mi permettesse di farli in fretta, una sorta di calcolatrice per lo studio del calcolo combinatorio.

Il risultato e' l'ottimo qombinatorics!
Sono molto soddisfatto del risultato. :) L'applicazione e' gia' stata distribuita presso i siti specializzati e sto gia' raccogliendo molti consensi!

Vi lascio con un'immagine del mio ultimo parto!

PyQt4: inserire una icona nel vassoio di sistema

Una applicazione ospitata nel vassoio di sistema (system tray, in inglese) da grandi vantaggi, quale quello di essere facilmente accessibile, pur occupando uno spazio ridotto. Lo svantaggio di questo tipo di applicazioni e' che spesso il vassoio di sistema e' pieno zeppo di icone.

Qualora trovaste indispensabile aggiungere nel vassoio di sistema la vostra iconcina ma non sapete come fare, allora siete nel posto giusto!
Ecco un esempio commentato che vi spieghera' come cominciare
from PyQt4 import QtCore, QtGui
# Creiamo un'applicazione Qt, ...
app = QtGui.QApplication([])
# e un'icona
icon=QtGui.QIcon("/usr/lib/firefox-2.0.0.10/res/samples/raptor.jpg")
# Mettiamola nel systray
systray=QtGui.QSystemTrayIcon(icon)
# e mostriamola
systray.show()
# Interagiamo con l'utente
titolo="Titolo" # Ma che fantasia!
messaggio="Messaggio per l'utente!\nClicca per chiudere l'applicazione"
tempo=10000 # in millisecondi
systray.showMessage(titolo,
messaggio,
QtGui.QSystemTrayIcon.Information,
tempo)
# connettiamo il click alla chiusura dell'applicazione
QtCore.QObject.connect(systray, QtCore.SIGNAL("messageClicked()"), app.quit)
# Eseguiamo l'applicazione
app.exec_()

Ovviamente potete cambiare il titolo, il messaggio, l'icona, ecc...
Quel che e' certo e' che per rendere l'applicazione interessante e fruibile potreste aggiungerci un menu' contestuale e altre amenita' e impostare connessioni piu' sensate.

PyQt4: creare connessioni signal slot senza usare Qt designer

Qt designer 3 permetteva di creare connessioni a funzioni definite dall'utente. Questa caratteristica e' stata rimossa nella versione 4 poiche' si e' preferito rimanere quanto piu' fedeli possibile al concetto che il designer serve per disegnare e non per programmare.
Le connessioni andranno quindi scritte a mano nel codice.

Il metodo da usare per le connessioni e' QtCore.QObject.connect. Al posto di QtCore.QObject ovviamente mettere qualsiasi oggetto erede di questa classe (una QApplicatio per esempio). Vediamo quali sono gli argomenti corretti da inserire in questo metodo.
Le connessioni ammesse sono tra uno o piu' segnali con uno o piu' slot o segnale e sono schematizzate qui di seguito:
QtCore.QObject.connect(widget1, Segnale, Funzione o metodo Python)
QtCore.QObject.connect(widget1, Segnale, widget2, Slot)
Nel primo caso, che molto probabilmente e' il piu' frequente, viene emesso un segnale dalla widget1 e viene collegato ad una funzione o ad un metodo definito nel nostro codice.
Nel secondo caso il segnale viene collegato ad uno slot della widget 2.

Allo stesso modo e' possibile scollegare gli oggetti in questione con il metodo QtCore.QObject.disconnect.

PyQt4: un tutorial facile facile

Python e qt4 sono un binomio vincente che permette a tutti di realizzare velocemente applicazioni con un accattivante interfaccia grafica. Vediamo come!

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)!
Fig.1: Cominciamo da qualcosa di gia' preimpostato
Se tutto e' andato bene dovreste avere qualcosa di simile a quanto mostrato in figura 2... Ora siete pronti a lavorare sul serio!
Fig. 2: L'ambiente di lavoro e' pronto!
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):
Fig. 3: Inseriamo widget per l'input e l'output
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)!
Fig. 4: l'interfacia e' pronta!
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 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

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()
Il comando python myApp.py gia' dovrebbe presentarvi la vostra interfaccia, perfettamente funzionante: se cliccate sui pulsanti si chiudera'! E cosa doveva fare di piu'?!

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!