「Differences Between PyQt4 and PyQt5」の抄訳
PyQt使ってみたかったけど、ver.4とver.5で違いが結構あるぽいので Differences Between PyQt4 and PyQt5 — PyQt 5.2.1 Reference Guide を抄訳してみた。
なにか変なところがあったら教えてくだちい。
PyQt4とPyQt5の違い
PyQt5とPyQt4は、互換性がありません(が、PyQt4からPyQt5へのアプリケーションの移植は難しいことではないと言えます)。 このセクションでは、PyQt5とPyQt4の間の主要な違いについて説明します。
サポートするPythonのバージョン
Python2.6より古いバージョンはサポートしません。
廃止予定の機能
PyQt5では、deprecatedになった又はQt v5.0で廃止したAPIについてはサポートしません。 しかし、いくつかのAPIをうっかり含んでしまうかもしれません。 それらはバグなので、見つけ次第直していきます。
複数のAPI
PyQt4では複数バージョンのAPIをサポートしています(例えば、QString, QVariantなど )。 PyQt5ではQVariantを除いて、全てのAPIはv2のみが実装しています。 QVariantの変更と、QPyNullVariantについては、 Support for QVariant — PyQt 5.2.1 Reference Guide を参考にしてください。
古いスタイルのシグナルとスロット
PyQt4での古いスタイルのシグナルとスロットはサポートしません。 そのため、次のメソッドPyQt5では実装していません。
QObject.connect()
QObject.emit()
SIGNAL()
SLOT()
SIGNAL()
とSLOT()
の返り値を引数としてつかうメソッドは、全てサポートしません。
シグナルか、それぞれ呼ばれるメソッドは常に同等なものとして、違いがなくなります。
加えて、次のメソッドは違いが発生します。
disconnect()
は、引数を取らず全てのQObjectインスタンスから切断します。
新しいスタイルのシグナルとスロット
Qtは2つの異なる引数を持つシグナルを実装しています、1つは引数を使うもので、もうひとつは引数を使わないものです。 PyQt4では、好きな方を選んで使うことができました。 しかしながら、シグナルを発するときに、あなたは適切な引数を持つシグナルを使う必要がありました。
PyQt5では、全ての引数が指定されたシグナルのみを使うことができます。 しかし、シグナルを発するときに不要な引数は省略することができます。
PyQt4とは違って、PyQt5ではプロパティでの定義をサポートしており、シグナルとスロットはQObjectのサブクラスではなくなりました。
QtDeclarative、QtScript、QtScriptToolsモジュール
PyQt4のQtDeclarative
、QtScript
、QtScriptTools
モジュールはサポートしません。
PyQt5では、これらはQtQml
とQtQuick
モジュールに置き換えました。
PyQt4と違って、PyQt5ではQMLからPythonオブジェクトの生成をサポートします。
QtGuiモジュール
PyQt4のQtGui
モジュールは、PyQt5ではQtGui
、QtPrintSupport
、QtWidgets
モジュールに分割しました。
QtOpenGLモジュール
PyQt5では、QGLContext
、QGLFormat
、QGLWidget
クラスのみをサポートします。
QtWebkitモジュール
PyQt4のQtWebKit
モジュールは、PyQt5ではQtWebKit
とQtWebKitWidgets
モジュールに分割しました。
QtXmlモジュール
PyQt4のQtXml
モジュールはサポートしません。
QXMLStreamReader
クラスかQXMLStreamWriter
クラスか、Pythonの標準XMLモジュールを使ってください。
pyqtconfigモジュール
PyQt4のpyqtconfig
モジュールはサポートしません。
この The PyQt5 Extension API — PyQt 5.2.1 Reference Guide で、PyQt5でのサードパーティのパッケージ(例:QScintilla)についてを説明しています。
dbus.mainloop.qtモジュール
PyQt4のdbus.mainloop.qt
モジュールは、PyQt5ではdbus.mainloop.pyqt5
になりました。
これは、並べて実行することも許可し、どちらも同じ機能になります。
QDataStream
readUInt8()
、readInt8()
、writeUInt8()
、writeInt8()
メソッドは、全て数値の読み書きとして解釈されます。
PyQt4では、これらは1つの文字について解釈されていました。
QFileDialog
PyQt4のQFileDialog
に属するgetOpenFileNameAndFilter()
、getOpenFileNamesAndFilter()
、getSaveFileNameAndFilter()
メソッドは、PyQt5ではgetOpenFileName()
、getOpenFileNames()
、getSaveFileName()
に改名しました。PyQt4のgetOpenFileName()
、getOpenFileNames()
、getSaveFileName()
はPyQt5ではサポートしません。
QGraphicsItemAnimation
廃止予定だったQGraphicsItemAnimation
クラスは削除しました。
もし、移植したいPyQt4アプリケーションで使用していた場合は、QPropertyAnimation
をかわりに使うことを検討してみてください。
QMatrix
廃止予定だったQMatrix
クラスは削除しました。
もし、移植したいPyQt4アプリケーションで使用していた場合は、QTransform
をかわりに使うことを検討してみてください。
QPyTextObject
PyQt4はQPyTextObject
を複数のQtのクラスからサブクラス化されたPythonクラスを定義することができないことの回避策として使用しています。
PyQt5はQ_DECLARE_INTERFACE
のようにC+ +で宣言されている、インタフェースがあるものであれば、複数のQtのクラスからサブクラスであるPythonのクラスを定義する機能をサポートしています。
したがってQPyTextObject
はPyQt5に実装されていません。
QSet
PyQt4では、QSet
はPython v2ではリストとして、Python v3ではセットとして実装していました。
PyQt5では、常にセットとして実装しています。
pyuic5
pyuic5
は、pyuic4
の--pyqt3-wrapper
フラグをサポートしません。
pyrcc5
pyrcc5
はpyrcc4
の-py2
と-py3
フラグをサポートしません。
pyrcc5
の出力は、Python v2.6以降の全てのバージョンに互換性があるものになります。
Cooperative Multi-inheritance
Releasing the GIL
Object Destruction on Exit
時間無くなっちゃった(・ω<)