Python és un llenguatge de programació interpretat i multi paradigma. Les QT són unes llibreries gràfiques multiplataforma, que sustenten projectes tan importants com l'escriptori KDE. De la unió de dues grans eines, sorgeix el PyQT, un port d'aquestes llibreries per Python. Aquesta és una petita introducció per a començar a desenvolupar aplicacions gràfiques en un temps record, i com a tot bon article introductori, programarem un Hola món!
Per a dissenyar l'entorn gràfic emprarem el QT4 Designer, un programa que ens permet crear la UI a base de ratolí. En el nostre cas, simplement crearem un widget, i li afegirem un label per a mostrar el text i un botó.

Guardam i ens crea un fitxer anomenat file.ui, que simplement és un fitxer de text amb la descripció formal de l'entorn gràfic. Afortunadament, disposam d'eines com pyuic4, que ens permet generar el codi de PyQT4 que faria falta per crear determinada aplicació gràfica a partir del fitxer .ui.
pyuic4 tuto.ui > tuto_ui.py
Ara arriba el moment de començar a picar un poc de codi. Cream i editam el fitxer tuto.py
import sys
from PyQt4 import QtCore, QtGui
from tuto_ui import Ui_Form
class Tuto(QtGui.QMainWindow):
    def __init__(self, parent=None):
       QtGui.QWidget.__init__(self, parent)
       self.ui = Ui_Form()
       self.ui.setupUi(self)
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    finestra = Tuto()
    finestra.show()
    sys.exit(app.exec_())
I ara ho executam amb python tuto.py. WTF? Ens mostra l'entorn, però quan premem el botó no ens saluda, que era l'objectiu inicial de l'aplicació! Fora nirvis, si no funciona es per que encara no ho hem definit. Aquest codi simplement és l'estandar per a fer funcionar una aplicació.
Per fer una cosa d'aquestes hem d'introduir el concepte de signal, un mecanisme de QT per a relacionar widgets entre si. L'objectiu es que, donat cert esdeveniment (en aquest cas que es premi el botó) el programa reaccioni correctament (nosaltres volem mostrar un missatge). Això es defineix com
QtCore.QObject.connect(self.ui.pushButton,QtCore.SIGNAL("clicked()"),self.sayHello)On
sayHello és un mètode que hem definit nosaltres que s'encarrega de mostrar el text. Aquesta línia s'ha d'afegir a la funció __init__ de la classe Tuto. La funció sayHello quedaria com
def sayHello(self):
    self.ui.label.setText("Hola nena!")I el
codi resultant és
import sys
from PyQt4 import QtCore, QtGui
from tuto_ui import Ui_Form
class Tuto(QtGui.QMainWindow):
   def __init__(self, parent=None):
      QtGui.QWidget.__init__(self, parent)
      self.ui = Ui_Form()
      self.ui.setupUi(self)
      QtCore.QObject.connect(self.ui.pushButton, \*
QtCore.SIGNAL("clicked()"),self.sayHello)
    def sayHello(self):
        self.ui.label.setText("Hola nena!")
if __name__ == "__main__":
   app = QtGui.QApplication(sys.argv)
   finestra = Tuto()
   finestra.show()
   sys.exit(app.exec_())
Què aprofiti!
[*] Perdonau, però pel format del blog he hagut de partir la línia en dos. Obviament vosaltres ho heu d'escriure tot seguit, i sense el \*.