web-dev-qa-db-ja.com

PyQtまたはPySide-どちらを使用するか

私は少しpythonを学び始めたので、GUI構築を少しいじりたいと思います。Qtはクロスプラットフォームであるため、良い選択のようです。
現在、利用可能なバインディングは2つあります。RiverbankComputingのPyQtとNokiaが最初に開発したPySideです。
では、どちらを選択する必要がありますか?私が見つけることができるのは2年前の機能比較だけですが、最近はどのような違いがありますか?
使いやすいのはどれですか?両方ともまだ活発に開発されていますか?
商用アプリケーションを作成するつもりはないので、ライセンスは私にとってあまり重要ではありません。

68
shutefan

どちらのツールキットも積極的に保守されており、現在では機能と品質がほぼ同等です。重要な違いはほとんどありません。

それでも、Python 2にはPySideをお勧めします。主にPythonに直接相当するQt型(QString、 QListなど)またはQVariantのようなPythonの動的な性質のために完全に不要です。これにより、Qt型との間の多くの退屈な変換が回避されるため、プログラミングが容易になり、多くのエラーが回避されます。

PyQtはこの最新のAPIもサポートしており、Python 3にはデフォルトで使用しますが、下位互換性を維持するためにPython 2には使用しません。

31
lunaryorn

ライセンスの違いもあります。 PySideはLGPLであり、PyQtはGPLです。プロジェクトをオープンソースにしたくない場合、これは違いを生む可能性があります。 PyQtは常に妥当な価格で利用できる適切なバージョンを持っていますが。

私はPySideのドキュメントをより直感的にする傾向があります。私の意見では、APIはもう少しPythonicであり、バグ修正の割合は現時点では非常に印象的です。

PyQtには、Python 3のサポートと現職という利点があります。サードパーティのドキュメント/チュートリアルがさらにたくさんあります。

25
Gerald

最近、PyQtからPySideに重要なコードベース(8,000行を超えるコード)を移植しました。

今のところ、PyQtははるかに成熟した、パフォーマンスがあり、安定したプロジェクトです。私はPySideで多くのバグを見つけましたが、大きなプロジェクトが問題を引き起こすと思われます。そうは言っても、私はプロジェクトにバグを報告し、それは修正され、数週間以内に新しいリリースになりました。また、アプリの終了に約15秒かかるという問題もあります。理由を見つけるのにまだ時間を費やしていません。ただし、PySideよりもPyQtを選択する理由がなくなるのは時間の問題です。

今のところPyQtを使用することに決めた場合は、必ずAPI v2を使用してください。これは優れたAPIであり、将来のPySideへの移行を容易にします。また、移植する場合は、PySide wikiのガイドラインに従ってください。約20のソースファイルで構成される8個以上のklocアプリの場合でも、たった1日かかりました。

17
Simon Hibbs

Qt/C++クラスのインターフェイスは似ているかもしれませんが、signal/slot/propertyなどのQt/C++マクロのインターフェイスは大きく異なります。相互に移植するのは簡単な仕事ではありません。最初から正しい判断を下した方が良いでしょう。

文法/ライセンスの違いを超えて、PythonでQMLプロジェクトを書くために不可欠な言語バインディングのPyQtのいくつかの欠陥を指摘したいだけです。これらの違いがついに私をPyQtからPySideに押しやった。

  • qmlRegisterType

    qmlRegisterTypeは、QMLでランタイムC++バインディングを作成するために不可欠です。 PySideでは、PySide.QtDeclarativeの一部です。そして、これはPythonで非常にうまく機能します。

    PyQtでは、qmlRegisterTypeは存在しません。そして、私は代替アプローチを見つけることができませんでした。 QMLコンテキストを設定することで、いくつかの簡単なタスクを実行できることを知っています。しかし、qmlRegisterとQ_INVOKABLEを使用した実行時バインディングが本当に必要な場合は、現時点でPySideが唯一の選択肢だと思います。

  • Shiboken VS SIP

    どちらもQt/C++をpythonプラグインにラップすることができます。Shivokenの場合、それはよりシンプルで、コーディングの必要性が少ないと感じています。NAME classesエクスポートしたい、それだけです。Shivokenは、ターゲットクラスの構造についての追加のマニュアル記述を必要としません。

    SIPの場合、追加のコーディングが必要になります。ほぼすべてのC++ヘッダーを再実装するSIPファイルを作成する必要があります。クラスのNAMEだけでなく、また、methodsターゲットクラスの詳細C++クラスがPimpを使用して適切に設計されており、その中のすべてのメソッドをエクスポートする場合、SIPは、現時点ではできないすべてのクラスメソッドを自動的にエクスポートする方法を提供する必要があります。これにより、SIPとC++ヘッダーの間の一貫性を維持するための負担も増えます。

    しかし、Qt wikiのShibokenのドキュメントは非常に悪く、誤解を招くと言わざるを得ません。 Python WindowsでShibokenを使用してプラグインを作成する場合、必ずしもCMakeは必要ありません。generatorrunnerも必要ではなく、Windows cmdスクリプトを使用してshibokenを呼び出し、qmake proを使用してターゲットプラグインをコンパイルするだけです。

10
jichi

重要な事実は、PyQt4にはいくつかの目的で2つのバージョンのAPIがあることです。バージョン1のアイテムは、QStringの代わりにunicodeQVariantを使用するようなものです(基本的には単なるラッパーです。実際に使用したことはありません)代わりにラップ。 Python 2で有効にでき、Python 3で有効になっているバージョン2)は、はるかに優れています(多くの場所でまだPythonではありません-PySideも、 PyQt4にはQtCore.pyqt(Signal|Slot|Property)があり、PySideにはQtCore.(Signal|Slot|Property)があります。

私自身のプロジェクトでは、コードを変更せずに両方をサポートすることにしました。私はPySideを好んでいますが、Windowsでは現在PyQt4で配布していますが、現在の配布ではかなり小さいです。私の解決策は、PySideを確認し、インポートフックを挿入してPyQt4のインポートをPySideにリダイレクトするか、そうでない場合は、PyQt4を修正して正常に動作させることです。

使用されるファイル:

  • pyqt4pysideimporter.py
  • Zip_imp.py (py2exeサポート用)
  • make_gui.py (pysideまたはpyqt4ツールを使用して.uiファイルと.qrcファイルを構築し、インポートを一貫性のあるものに修正するためのスクリプト;ファイル変更のポーリングと変更の再構築-inotifyのようなハイテクなもの)

次に、あなたはちょうど_import pyqt4pysideimporter_とpyqt4pysideimporter.autoselect()(そのリポジトリの_main.py_のように)。そしてその後、あなたはただ_import PyQt4_することができます。

余談ですが、数日前にPySideメーリングリストで、今後数か月以内にPython 3を完全にサポートする予定です。

10
Chris Morgan

私は20kの行を持っていますPython私はPySideに変換しようとして失敗しました。変換は簡単で、ほとんどの機能が動作します。 Windowsでは、PySide-1.1.2を使用して、多くのQtオブジェクトに「==」演算子が実装されていません。1つの回避策は、「if id(item1)== id (item2):」。PySideが著しく遅いように見えることもあります。遅さの原因としてPySideを分離しませんでしたが、PyQtに戻ると問題はなくなりました。

最後に、今のところ、PySideを搭載したAndroidキットはプライムタイムの準備ができていないようです。

4
SoloPilot