gpt4 book ai didi

python - 关闭 VTK 窗口(Python)

转载 作者:太空狗 更新时间:2023-10-29 21:32:08 26 4
gpt4 key购买 nike

考虑以下脚本

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)')

根据 VTK/Examples/Cxx/Visualization/CloseWindow , 这个

iren.GetRenderWindow().Finalize()  # equivalent: renWin.Finalize()
iren.TerminateApp()

应该完成工作,但它没有。

我还需要做什么才能以编程方式关闭打开的窗口?

最佳答案

简答

只漏了一行!

del renWin, iren

长答案

您可能会想要编写一个函数来处理这样的窗口关闭

def close_window(iren):
render_window = iren.GetRenderWindow()
render_window.Finalize()
iren.TerminateApp()
del render_window, iren

然后使用它(考虑问题中的脚本):

...
iren.Initialize()
renWin.Render()
iren.Start()

close_window(iren)

这是行不通的。原因是

del x doesn’t directly call x.__del__() — the former decrements the reference count for x by one, and the latter is only called when x‘s reference count reaches zero (__del__ documentation).

( __del__()AttributeError ( iren ) 和 vtkRenderWindowInteractor ( renWin ) 上失败 ( vtkRenderWindow )

记住 iren (和 renWin 也是)在您的脚本中定义,因此它具有对函数中(据推测)被删除的对象的引用。

这会起作用(虽然该函数不会管理所有窗口关闭的东西):

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

关于python - 关闭 VTK 窗口(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15639762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com