wxpythonのウィンドウ内部にvtkを表示するパネルを作ってみた
まあ、vtkはQtを推奨しているので普通はQtを使うのですが、wxの方が慣れているのでwxでどうやるのかなぁと思っていたら、このビデオにwxでvtkを表示するキャンバスの使い方が説明してあったので、やってみました。
ビデオではiPythonでインタラクティブにGUIスレッドを変更しながらプログラムするやり方が説明されていて、とっても便利そうです。ですが、ちょっと古い情報のようで、このビデオでつかわれている-wthreadのオプションは現在は廃止されて--guiオプションというのになっています。公式のドキュメンテーションによると、ipython0.11からPython純正のPyOSInputHookを使う方法に変更されて、安定性が強化されたためこうなった模様。というわけでwxpythonなので--gui=wxとしてipythonを起動するか、起動したあとで%guiのマジックを使用すればいいようです。
wx.Panelにドーナツを表示する
ビデオにあるコードをちょっといじってサンプルコードを書いてみました。できるだけwxとvtkを分けました。
import vtk
from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor
import wx
class vtkTestWindow(wx.Frame):
def __init__ (self, parent):
wx.Frame.__init__(self, parent, title='vtk test window')
canvas = wx.Panel(self, size=(640,480))
rwi = wxVTKRenderWindowInteractor(canvas, -1)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(rwi, 1, wx.EXPAND)
self.SetSizer(sizer)
self.Layout()
rwi.Enable(True)
self.SetupRender()
rwi.GetRenderWindow().AddRenderer(self.ren)
self.Show()
def SetupRender(self):
# minimum vtk pipeline
superquadric = vtk.vtkSuperquadricSource()
superquadric.ToroidalOn()
m = vtk.vtkPolyDataMapper()
m.SetInput(superquadric.GetOutput())
a = vtk.vtkActor()
a.SetMapper(m)
ren = vtk.vtkRenderer()
ren.AddActor(a)
self.ren = ren
if __name__ == '__main__':
app = wx.App(0)
frame = vtkTestWindow(None)
app.MainLoop()
とりあえず表示されましたね。マウスでグリグリ回転します。コントロール押しながらマウスドラッグで拡大縮小。シフトだと縦横の移動。表示もさすがになめらかです。今日はここまで。あとはビデオプレーヤーを作ってみる予定なので、vtkの方でマウスのイベントを拾ってもらいたくないので、その辺りの変更を確認しなくては。
« 非道すぎるけど腹抱えてわらったIndian Yoga Retreat Prank。 | トップページ | wxpythonとvtkでビデオプレーヤー作ってみる。その1。C++のJpeg表示サンプルをPythonに翻訳。 »
「Python」カテゴリの記事
- Noteの記事をPythonでバックアップしといた。(2021.05.05)
- JupyterLabでも好きな外部エディターを使いたい!(2018.05.02)
- ローカルエリア内のJupyterLabサーバーにLAN経由で接続する。(2018.05.02)
- Juliaやってみよう。五日目。Pythonと速度比較。(2017.08.01)
- Juliaやってみよう。四日目。@timeでプロファイリング(2017.07.16)
« 非道すぎるけど腹抱えてわらったIndian Yoga Retreat Prank。 | トップページ | wxpythonとvtkでビデオプレーヤー作ってみる。その1。C++のJpeg表示サンプルをPythonに翻訳。 »




コメント