关闭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