wxWidgets/wxPython/demo/viewer_basics.py

70 lines
1.8 KiB
Python
Raw Normal View History

from wxPython.wx import *
from wxPython.lib import vtk
#---------------------------------------------------------------------------
class VtkFrame(wxFrame):
"""
Simple example VTK window that contains a cone.
"""
def __init__(self, parent, id, title):
wxFrame.__init__(self, parent,id,title, size=(450, 300))
win = vtk.wxVTKRenderWindow(self, -1)
renWin = win.GetRenderWindow()
ren = vtk.vtkRenderer()
renWin.AddRenderer(ren)
cone = vtk.vtkConeSource()
coneMapper = vtk.vtkPolyDataMapper()
coneMapper.SetInput(cone.GetOutput())
coneActor = vtk.vtkActor()
coneActor.SetMapper(coneMapper)
ren.AddActor(coneActor)
#---------------------------------------------------------------------------
wxEVT_ADD_CONE = 25015
def EVT_ADD_CONE(win, func):
win.Connect(-1, -1, wxEVT_ADD_CONE, func)
class AddCone(wxPyEvent):
def __init__(self):
wxPyEvent.__init__(self)
self.SetEventType(wxEVT_ADD_CONE)
class HiddenCatcher(wxFrame):
"""
The "catcher" frame in the second thread.
It is invisible. It's only job is to receive
Events from the main thread, and create
the appropriate windows.
"""
def __init__(self):
wxFrame.__init__(self, None, -1, '')
EVT_ADD_CONE(self, self.AddCone)
def AddCone(self,evt):
add_cone()
#---------------------------------------------------------------------------
class SecondThreadApp(wxApp):
"""
wxApp that lives in the second thread.
"""
def OnInit(self):
catcher = HiddenCatcher()
#self.SetTopWindow(catcher)
self.catcher =catcher
return True
#---------------------------------------------------------------------------
def add_cone():
frame = VtkFrame(None, -1, "Cone")
frame.Show(True)