关闭VTK窗口(Python)
考虑以下脚本关闭VTK窗口(Python),python,vtk,Python,Vtk,考虑以下脚本 import vtk ren = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) an_actor = vtk.... # create an actor ren.AddActor(an_actor) iren.Initialize() ren
import vtk
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
an_actor = vtk.... # create an actor
ren.AddActor(an_actor)
iren.Initialize()
renWin.Render()
iren.Start()
如果脚本到此结束,则一切正常,当手动关闭窗口(单击X)或按下退出键(Q或E)时,创建的窗口将关闭,资源将释放
但是,如果有更多的语句,您会注意到窗口仍然存在,这是可以理解的,因为我们没有调用任何东西来放弃它,只是结束了交互循环
请通过附加以下内容亲自查看:
temp = raw_input('The window did not close, right? (press Enter)')
据报道,
我们应该把工作做完,但是没有
我还需要做些什么才能以编程方式关闭打开的窗口?简短回答
只缺一行
del renWin, iren
长话短说
您可能会尝试创建一个函数来处理这样的窗口关闭
def close_window(iren):
render_window = iren.GetRenderWindow()
render_window.Finalize()
iren.TerminateApp()
del render_window, iren
然后使用它(考虑问题中的脚本):
这行不通。原因是
del x
不直接调用x.\uu del\uuu()
——前者递减
x的引用计数为1,只有在
x的引用计数达到零()
(\uu del_uu()
在iren
(vtkrenderWindowInteractitor
)和renWin
(vtkRenderWindow
)上失败(AttributeError
)
请记住,iren
(还有renWin
)是在脚本中定义的,因此它在函数中引用了要删除的对象
这会起作用(尽管函数不会管理所有窗口关闭的内容):
然后使用它:
...
iren.Initialize()
renWin.Render()
iren.Start()
close_window(iren)
del renWin, iren
我认为你应该接受你自己的答案作为你问题的答案。
...
iren.Initialize()
renWin.Render()
iren.Start()
close_window(iren)
def close_window(iren):
render_window = iren.GetRenderWindow()
render_window.Finalize()
iren.TerminateApp()
...
iren.Initialize()
renWin.Render()
iren.Start()
close_window(iren)
del renWin, iren