Zum Inhalt springen

Erste Schritte – oder – was brauche ich alles für PyQt

3. Dezember 2009

Wenn man unter Ubuntu entwickelt ist es sehr einfach. Mach ma mal ne Shell auf und tippen

apt-cache search pyqt

Die Liste ist sehr überschaubar. Die wichtigsten Pakete hierfür sind:

pyqt4-dev-tools - Development tools for PyQt4
python-qt4 - Python bindings for Qt4
python-qt4-dev - Development files for PyQt4

Nachdem man diese Pakete installiert hat, sollte alles Startbereit sein. Sollte man noch andere Module für Qt benötigen kann man diese nachträglich installieren. Unter Windows empfehle ich dringeds die aktuelle Version von http://www.riverbankcomputing.co.uk/software/pyqt/download herunter zu laden. Bitte keine alternativen Downloadquellen verwenden unter Windows, da diese meist veraltet sind und das kann böse werden wenn man zB unter Linux entwickelt und das ganze auch für Windows funktionieren soll ( QVariant ist da eines der bösen Paradebeispiele – das klappte unter Windows nicht wirklich und somit sind wichtige Module wie QSettings nicht wirklich nutzbar )

Wie sieht denn nun das eigene erste Programm aus?

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys

class MyFirstApplication(QDialog):
    def __init__(self, parent = None):
        super(QDialog, self).__init__(parent)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myapp = MyFirstApplication()
    myapp.show()
    app.exec_()

Das war es. Ist doch simpel oder? Viel brauch man hier nicht erklären, ausser vielleicht das jede Klasse ein QWidget erweitert. QWidget wird von QObject abgeleitet, das heisst das im Prinzip alles ein Widget sein kann, also ein PushButton ist genauso ein Widget wie zB eine QMainWindow oder QDialog oder sonst was.

Mit der Parameter übergabe kann es jeder so händeln wie er es will, am besten ist es aber man verwendet sys.argv. Alternativ dazu kann man eine leere Liste übergeben mit [].

app = QApplication(sys.argv)

Danach brauchen wir ein Object von unserer Klasse mit

myapp = MyFirstApplication()

Nun noch schnell alles anzeigen lassen und fertig.

myapp.show()
app.exec_()

Das Resultat sollte dann ein QDialog mit nichts im Inhalt sein.

Am Anfang …

3. Dezember 2009

… war PHP. Dann dauerte es eine Weile und viel Überwindung das ich mich dazu entschloss einmal Python anzusehen. Zugegeben, ich bin kein Spezialist in Python, eher Fortgeschritten, aber wenn man keine andere Wahl hat, weil man eine GUI erstellen will für ein riesiges VOIP Projekt und nicht gleich mit C++ an die Sache ran gehen will dann nimmt man eine Programmiersprache die dazu am besten geeignet ist. Und somit wäre ich wieder mal bei Python. Die Syntax von Python unterscheidet sich bei näherer Betrachtung leider sehr stark von PHP, vor allem in der OO, aber daran gewöhnt man sich schnell.

Ganz ehrlich: Mittlerweile schmeißt mir mein PHP dauernd Fehler Meldungen weil ich jedesmal das Semilokon am Ende eines Statement vergesse :wink:

Meine Entscheidung für Python kommt nicht von ungefähr. Heute kann es sich kein Programmierer mehr wirklich erlauben nur für eine Plattform zu programmieren. (Ausnahmen sind natürlich Serverprogramme)
Aus diesem Grund habe ich ein GUI Framework gebraucht welches nahtlos portierbar ist, und siehe da, Qt [cute] ist dazu bestens geeignet. Mittlerweile gibt es massig Software welche auf dieses Framework setzen. Siehe Skype, VLC, etc.

Qt ist portierbar auf Mac, Windows, Linux, Symbian, Windows Mobile …. da ist wohl keine alternative vorhanden. Ich habe mir zwar auch die Bindings für GTK angesehen, diese sind aber unter Windows sehr hässlich und nicht wirklich portierbar. EKIGA ist da eines der besten Beispiele. Unter Windows, no chance. Dauernd stürzt es ab … also nein danke.

Nachdem ich mir noch Pyside (alternative zu PyQt) angesehen habe, musste ich feststellen das manche Sachen nicht wirklich toll implementiert waren. Mittlerweile habe ich versucht einmal mein Programm auf Pyside umzustellen ( Pyside ist ja – im Gegensatz zu PyQt – offizieller Partner von Qt ) und siehe da: Das Programm war um 30 % langsamer und manche Teile des Codes hätten komplett umgeschrieben werden müssen. Noch dazu ist Pyside noch nicht frei gegeben worden für Produktivumgebungen. Und ausserdem ist die Dokumentation von Pyside sehr mager und sehr viele Codebeispiele fehlen einfach. Bei PyQt ist das mit der Dokumentation leider auch so eine Sache aber dafür wirkt diese vollständiger und orientiert sich zudem viel mehr an der Doku von Qt.

Fazit: Meine Wahl ist also nun Python in der Version 2.6 in Verbindung mit PyQt4. Für die Portierung auf die einzelnen Plattformen verwende ich py2app (MacOS), py2exe (Windows) und cx_freeze ( Linux – sofern ich cx_freeze einmal zu laufen bekomme )

Ich werde in diesem Blog versuchen meine Erfahrungen mit PyQt nieder zu schreiben um so Interessierten Leuten ein wenig Hilfestellung zu geben. Meine Anfänge mit PyQt waren sehr schwer und das ist meine Art der Community was zurück zu geben. Sollten Fragen auftauchen können diese natürlich gestellt werden und sofern ich Erfahrungen in dem Bereich habe werde ich diese auch gerne weiter geben.

Follow

Get every new post delivered to your Inbox.