我正在尝试使用 python 创建一些科学可视化。我使用 vedo 库。我有一组按顺序排列的 vtk 文件,我正在尝试创建一个动画。这是我的代码:
from vedo import *
import os
vtk_files = [file for file in os.listdir() if file.endswith('.vtk')]
vtk_files.sort()
# Create a Plotter instance
plotter = Plotter()
for i in vtk_files:
print(i)
mesh = load(i,unpack=True, force=True)
plotter += mesh
plotter.show()
plotter.clear()
plotter.close()
在循环过程中,会弹出一个绘图窗口,显示第一个 vtk 文件,然后冻结。情节没有被清除,窗口也没有关闭。这意味着plotter.clear() 和plotter.close() 命令不起作用。当我手动关闭绘图窗口时,代码跳转到下一个 vtk 文件,但它没有显示绘图,因为绘图窗口已经关闭。我对另一个可视化包也有同样的问题。是否与这些库使用的绘图模块(Pyqt 或任何小部件)有关?请帮忙。
我已经检查了 vtk 和 vedo 文档,但我找不到问题所在。我在 stack Overflow 和 github 上查了很多问题,但仍然找不到任何东西。
您正在循环内关闭绘图仪。考虑以下选项:
from vedo import *
meshes = load("letter_*.vtk") # sort is done automatically
plotter = Plotter(axes=1)
for i, m in enumerate(meshes):
m.pos([i*2000, 0, 0]).color(i)
plotter.show(meshes).close()
另一种选择:
import time
from vedo import *
meshes = load("letter_*.vtk")
plotter = Plotter(interactive=False)
plotter.show() # show the empty window
for i, m in enumerate(meshes):
m.color(i)
plotter.remove(meshes).add(m)
plotter.reset_camera().render()
time.sleep(0.5)
plotter.interactive().close()
将一一可视化您的网格。请注意,对象也可以按名称删除,例如:
mesh.name = "jack"
然后 plotter.remove("jack")
将删除它。