私の仕事では、MayaviクロスプラットフォームビジュアライザーとChacoチャートビルダーを使用する必要があります(関心がある-code.enthought.com/chacoとcode.enthought.com/projects/mayaviを読んでください )。 私の仕事は、HPGL-GUIアプリケーションにフレームを埋め込むことでした。 最初は、PyQt4ですべてを書きましたが、1つを除いてすべてが順調でした。 問題はライセンスにありました。 PySideはLGPL v2.1で使用できます。LGPLv2.1は、商用のニーズにぴったりです。
PySideは救助に来ました。それはすでにEnthought製品のバックエンドとして積極的に使用され始めています。 最初の落とし穴が私を待っていたのはその時でした。
埋め込み用のPySideの正確な使用方法に関するドキュメントの不足。
ソースを少しさまようと、値「pyside」に環境変数「QT_API」を指定するだけで十分であることがわかりました。
輸入 OS
os 。 environ [ 'QT_API' ] = 'pyside'
それにもかかわらず、アプリケーションは動作を拒否しました。 ソースの編集に便利です。 それほど多くの変更はなかったようですが、最初から問題を見つけるのは非常にうんざりし、長い時間を要します。 さらなる指示が誰かを助けることを願っています。
まず、gitaからパッケージを収集する必要があります。 PySide、git、subversion、setuptools、swig、numpy、scipy、vtk、wxpythonをインストールします。 Windowsの場合、mingwもインストールする必要があります(vtkとwxpython for Win。時間を節約するために、ここからwww.lfd.uci.edu/~gohlke/pythonlibsを取得することをお勧めします)。
- ダウンロードしてETSフォルダーに入れ、そこに移動してリポジトリーのクローンを作成します。
git clone git: // github.com / enthought / traits.git Traits
git clone git: // github.com / enthought / traitsbackendqt.git TraitsBackendQt
git clone git: // github.com / enthought / traitsbackendwx.git TraitsBackendWX
git clone git: // github.com / enthought / traitsgui.git TraitsGUI
git clone git: // github.com / enthought / enable.git Enable
git clone git: // github.com / enthought / chaco.git Chaco
git clone git: // github.com / enthought / mayavi.git Mayavi
git clone git: // github.com / enthought / enthoughtbase.git EnthoughtBase
git clone git: // github.com / enthought / envisagecore.git EnvisageCore
git clone git: // github.com / enthought / envisageplugins.git EnvisagePlugins
git clone git: // github.com / enthought / etsdevtools.git ETSDevTools
git clone git: // github.com / enthought / blockcanvas.git BlockCanvas
git clone git: // github.com / enthought / graphcanvas.git GraphCanvas
git clone git: // github.com / enthought / codetools.git CodeTools
git clone git: // github.com / enthought / apptools.git AppTools
git clone git: // github.com / enthought / scimath.git SciMath - アセンブリを開始します。
python ets。 py開発
- アセンブリが失敗した場合、必要なパッケージをインストールしてスクリプトを再起動します
- ビルドが成功したら、Mayavi / enthought / tvtk / pyface / ui / qt4 /ディレクトリに移動します
すべてのファイルを一度に1つずつ開き、PyQt4インポートをPySideに変更します。
必要に応じて、フォームのデザインを使用できます。
輸入 OS
qt_api = os 環境 get ( 'QT_API' 、 'pyqt' )
qt_api == 'pyqt'の場合 :
PyQt4 から QtGui、QtCoreをインポート
その他 :
PySide から QtGui、QtCoreをインポート - 同じディレクトリのinit.pyファイルで、PyQtバージョンチェックで26〜30行目をコメントアウトする必要があります。
#if QtCore.QT_VERSION <0x040200:
#RuntimeErrorを発生させ、「Qt v4.2以上が必要ですが、v%sを取得しました」%QtCore.QT_VERSION_STR
#if QtCore.PYQT_VERSION <0x040100:
#RuntimeErrorを発生させ、「PyQt v4.1以上が必要ですが、v%sを取得しました」%QtCore.PYQT_VERSION_STR - TraitsBackendQt / enthought / traits / ui / qt4 / ui_panel.pyの行920〜926(関数__add_widget(...))を編集します。
行< 0の 場合 :
isinstance ( w、 QtGui。QWidget )の場合 :
レイアウト。 addWidget ( w )
elif isinstance ( w、 QtGui。QLayout ) :
レイアウト。 addLayout ( w )
その他 :
レイアウト。 addWidget ( w ) - Winで作業する場合は、Mayavi \ enthought \ tvtk \ pyface \ ui \ qt4 \ QVTKRenderWindowInteractor.pyファイルを修正する必要があります
インポートに追加:
ctypes から pythonapi、c_void_p、py_objectをインポートします
pythonapi。 PyCObject_AsVoidPtr 。 restype = c_void_p
pythonapi。 PyCObject_AsVoidPtr 。 argtypes = [ py_object ]
そして、テキストエディターの置換を使用して、str(int(self.winId()))をstr(int(pythonapi.PyCObject_AsVoidPtr(self.winId())))に変更します
これらのすべての操作の後、例を実行できます。
Chacoの場合: pastebin.ubuntu.com/575888
Mayaviの場合:pastebin.ubuntu.com/575889
動作中のウィジェットのスクリーンショット:
PS誰か興味があるなら、チャコとマヤヴィの可能性と落とし穴に関する記事を書くことができます。