PyQt oder PySide - welche zu verwenden
Habe ich angefangen zu lernen, ein bisschen python und würde jetzt gerne Spielzeug, um ein bisschen mit gui-Gebäude. Qt scheint eine gute Wahl zu sein wegen seiner cross-platformishness.
Nun scheint es zwei Bindungen verfügbar: PyQt von Riverbank Computing und PySide, die ursprünglich von Nokia.
Also welche soll ich wählen? Alle, die ich finden kann, sind zwei Jahre altes feature-Vergleiche, aber was sind die Unterschiede heutzutage?
Das ist leichter zu bedienen, hat mehr/bessere Dokumentation? Sind beide noch in der aktiven Entwicklung?
Die Lizenzierung ist nicht viel Sorge um mich, da ich nicht vorhabe zu schreiben, kommerzielle Anwendungen.
InformationsquelleAutor der Frage shutefan | 2011-07-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beide toolkits sind aktiv gepflegt, und jetzt mehr oder weniger gleichen Funktionen und Qualität. Es gibt nur wenige, eher unbedeutende Unterschiede.
Immer noch, würde ich empfehlen, PySide für Python 2. Es hat eine vernünftige API, vor allem ist es nicht aussetzen Qt-Typen, die haben eine direkte Entsprechung in Python (z.B. QString, QList, etc.) oder die sind völlig überflüssig wegen Python ' s dynamische Natur, wie QVariant. Dies vermeidet viele lästige Konvertierungen zu und von Qt-Arten, und somit erleichtert die Programmierung und vermeidet viele Fehler.
PyQt unterstützt auch das moderne API-und nutzt es standardmäßig für Python 3, aber nicht für Python 2 um die Abwärtskompatibilität zu wahren.
InformationsquelleAutor der Antwort lunaryorn
Dort ist auch die Lizenzierung Unterschied. PySide ist LGPL, während PyQt GPL ist. Dies könnte einen Unterschied machen, wenn Sie nicht wollen, um Ihr Projekt opensource. Obwohl PyQt hat immer den Anstand-version verfügbar, für einen halbwegs vernünftigen Preis.
Neige ich dazu zu finden, die PySide Dokumentation intuitiver. Die API ist meiner Meinung nach etwas mehr Pythonic und die rate der bug-fixes ist sehr beeindruckend, zumindest im moment.
PyQt hat den Vorteil der Python-3-support und Amtszeit. Es ist viel mehr 3rd party Dokumentation/tutorials.
InformationsquelleAutor der Antwort Gerald
Ich vor kurzem portiert eine signifikante Codebasis (über 8.000 Zeilen code) von PyQt, PySide.
Recht jetzt würde ich sagen, PyQt ist eine viel mehr ausgereifte, performante und stabile Projekt. Ich traf eine Anzahl der bugs in PySide, und vermuten, dass jedes große Projekt auf Probleme. Having said, die, ich berichtete einen Fehler, um das Projekt und es wurde behoben und in einem neuen release in ein paar Wochen. Ich bin auch mit ein problem der app dauert etwa 15 Sekunden, um zu beenden. Ich habe noch nicht Zeit, um herauszufinden, warum. Aber es ist nur eine Frage der Zeit, bis es keine Gründe für die Wahl von PyQt über PySide.
Wenn Sie sich entscheiden, gehen mit PyQt und jetzt, stellen Sie sicher, dass Sie das API v2 gesamten. Ist es eine bessere API und erleichtert alle künftigen übergang zu PySide. Auch wenn Sie tun-port, Folgen Sie einfach den Richtlinien, die auf der PySide-wiki. Auch für ein 8+ kloc-app, die aus etwa 20 source files es dauerte nur einen Nachmittag.
InformationsquelleAutor der Antwort Simon Hibbs
Eine wichtige Tatsache ist, dass PyQt4 hat zwei Versionen seiner APIs für einige Dinge. Version 1 Elemente sind solche Dinge wie mit
QString
stattunicode
undQVariant
(im Grunde nur ein wrapper ist, glaube ich - ich habe eigentlich nie etwas gemacht, was nutzt es) anstelle der gewickelt. Version 2, die aktiviert werden können in Python 2 und aktiviert ist in Python 3, ist viel besser (wenn auch noch unpythonic in vielen Orten - PySide zu, aber es geht deutlich besser. Es gibt noch einige Inkompatibilitäten mit Ihnen; PyQt4 hatQtCore.pyqt(Signal|Slot|Property)
PySide hatQtCore.(Signal|Slot|Property)
.Für ein Projekt meiner eigenen, habe ich beschlossen, dass ich wollte, zu unterstützen, ohne änderungen am code. Ich bevorzuge PySide, aber auf Windows verteile ich mit PyQt4, da es derzeit durchaus ein bisschen kleiner für den Vertrieb zu präsentieren. Meine Lösung ist zu prüfen, PySide und wenn es dort legen Sie eine import-hook umleiten PyQt4 Importe zu PySide, oder wenn nicht, beheben PyQt4 zu funktionieren wie es sollte.
Dateien verwendet:
Dann haben Sie gerade den
import pyqt4pysideimporter
undpyqt4pysideimporter.autoselect()
(wie inmain.py
im repository). Und danach können Sie einfachimport PyQt4
.Beiseite: es wurde auch festgestellt vor ein paar Tagen auf der PySide mailing-Liste, die Sie planen, auf die Unterstützung von Python 3 vollständig innerhalb der nächsten paar Monate.
InformationsquelleAutor der Antwort Chris Morgan
Obwohl Sie möglicherweise ähnliche Schnittstelle für Qt/C++ - Klassen, die eine Schnittstelle für Qt/C++ Makros wie signal/slot/Eigenschaft sind sehr unterschiedlich.
Die Portierung von einem zum anderen ist nicht ein einfacher job. Es wäre besser, um die richtige Entscheidung treffen, ganz am Anfang.
Jenseits der Grammatik/Lizenz Unterschiede, ich möchte nur darauf hinweisen, einige Mängel von PyQt in der Sprache, die Bindung, die möglicherweise wichtig sind, um schreiben QML-Projekt in Python.
Diese Unterschiede finfally um mir PySide von PyQt.
qmlRegisterType
qmlRegisterType ist wesentlich zum erstellen von runtime-C++ - Bindung mit QML.
In PySide, es ist Teil PySide.QtDeclarative. Und das funktioniert ziemlich gut mit Python.
In PyQt, qmlRegisterType nicht vorhanden. Und ich konnte nicht finden einen alternativen Ansatz.
Ich weiß, einige einfache Aufgabe, die getan werden könnte, durch die Einstellung QML Kontext.
Aber wenn Sie wirklich brauchen laufzeitbindung mit qmlRegister und Q_INVOKABLE, ich denke PySide ist die einzige Wahl im moment.
Shiboken VS SIP
Beide wickeln kann Qt/C++ in python-plugin.
Für Shiboken, ich glaube, es ist einfacher und erfordert weniger Codierung.
Erstellen Sie einfach eine xml-typesystem einschließlich der NAMEN von Klassen, die Sie exportieren möchten, und das ist alles.
Shiboken erfordert keine zusätzlichen manuellen Beschreibungen für die Struktur des target-Klassen.
Für SIP, es würde mehr erfordern zusätzliche Codierung. Wir haben zum erstellen von SIP-Datei, die fast reimplements alles, was der C++ - header.
Es erfordert nicht nur die NAME der Klasse, aber auch die DETAILS von dem, was Methoden die Ziel-Klassen haben.
Wenn die C++ - Klasse ist in gutem design mit Pimp und wir wollen exportieren, alle Methoden innerhalb, SIP sollte bieten eine Möglichkeit zum automatischen export aller Klassenmethoden, die es nicht im moment.
Dies würde auch die Belastung für die Aufrechterhaltung der Konsistenz zwischen den SIP-und der C++ - Header.
Aber ich muss sagen, dass die Dokumentation für Shiboken auf Qt-wiki ist sehr schlecht und irreführend.
Erstellen von Python-plugin mit Shiboken auf Windows nicht zwingend erforderlich CMake überhaupt.
generatorrunner ist auch nicht erforderlich.
Ich verwende nur eine windows-cmd-Skript aufrufen shiboken, und ein qmake pro für die Erstellung der Ziel-plugin.
InformationsquelleAutor der Antwort jichi
Ich habe eine 20k-Leitung Python-app, die ich erfolglos versuchte zu konvertieren PySide.
Konvertierung ist so einfach und die meisten der Funktionalität arbeiten.
Es gibt mehrere Methoden, die nicht umgesetzt werden, weil Sie sind 'veraltet', also musste ich fix die. Das war OK.
Auf Fenster, die mit PySide-1.1.2 die '= = ' - operator nicht implementiert ist für viele Qt-Objekte. Eine Problemumgehung ist, zu sagen: "wenn id(item1) == id(item2):".
Die andere Beobachtung ist, dass PySide schien deutlich langsamer. Ich habe nicht isolieren PySide als Ursache für die Langsamkeit, aber das problem ging Weg, als ich wieder zu PyQt.
Schließlich ist, wie jetzt, die Android kit mit PySide scheint nicht bereit für die prime time.
InformationsquelleAutor der Antwort SoloPilot