Я хотел бы либо отключить окно предупреждения VTK, либо, что еще лучше, поймать их для обработки с помощью системы ведения журнала моего приложения. В моем приложении используется встроенное представление Mayavi, и я не хочу, чтобы появлялись окна с ошибками, которые я не могу контролировать. Следующий код демонстрирует окно предупреждения.
import numpy as np
from mayavi import mlab
x1 = np.array([1, 1, 2, 3])
y1 = np.array([1, 1, 4, 2])
z1 = np.array([1, 1, 5, 1])
mlab.plot3d(x1, y1, z1)
mlab.show()
Хорошо, я провел небольшое исследование и обнаружил, что vtk.vtkObject.GlobalWarningDisplayOff()
полностью отключает окно, и это приятно. Еще лучше следующий код будет записывать предупреждения в файл (нашел его здесь):
def redirect_vtk_messages ():
""" Can be used to redirect VTK related error messages to a
file."""
import tempfile
tempfile.template = 'vtk-err'
f = tempfile.mktemp('.log')
log = vtkpython.vtkFileOutputWindow()
log.SetFlush(1)
log.SetFileName(f)
log.SetInstance(log)
Так что, хотя это хорошо, я все еще не могу передать предупреждения непосредственно в обработчик ведения журнала. Я бы предпочел не иметь файл vtk_log рядом с моими обычными файлами журнала. Кроме того, я мог бы каким-то образом обрабатывать предупреждения в своем графическом интерфейсе или предоставлять пользователю варианты того, как их обрабатывать, и постоянное наблюдение за файлом журнала на предмет изменений кажется плохим способом сделать это.
Любые предложения по надежному pythonic способу обработки предупреждений vtk в приложении, которое встраивает mayavi/vtk?