Я хочу иметь возможность создавать много экземпляров vtkContourWidget, позволяя пользователю рисовать линии и манипулировать узлами, но, похоже, я делаю это неправильно.
Вот код:
import vtk
def main():
# Create a renderer, render window, and interactor
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
Interactor = vtk.vtkRenderWindowInteractor()
Interactor.SetRenderWindow(renderWindow)
style = vtk.vtkInteractorStyleTerrain()
Interactor.SetInteractorStyle(style)
Interactor.AddObserver("KeyPressEvent", keyPressEvent)
# Render and interact
renderWindow.Render()
Interactor.Start()
def keyPressEvent(obj, event):
key = obj.GetKeySym()
if key == 'n':
contourRep = vtk.vtkOrientedGlyphContourRepresentation()
contourWidget = vtk.vtkContourWidget()
contourWidget.SetInteractor(obj)
contourWidget.SetRepresentation(contourRep)
contourWidget.On()
#contourWidget.SetEnabled()
obj.Start()
return
main()
Это почти нормально работает, проблема в том, что, когда я хочу закрыть окно приложения, я должен нажать кнопку, чтобы закрыть окно много раз.И мне нужно щелкнуть один раз для каждого созданного vtkContourWidget.
Кажется, что каждый раз, когда я вызываю функцию keyPressEvent
и создаю vtkContourWidget, строку obj.Start()
(то же самое, что Interactor.Start()
)создает экземпляр другого экземпляра приложения?
Я также пытался contourWidget.SetEnabled()
(с obj.Start()
закомментированным), и он работает для создания новых экземпляров vtkContourWidget, но когда я пытаюсь закрыть приложениеокно, приложение зависает.
С кодом obj.Start()
и contourWidget.SetEnabled()
я могу создать много экземпляров, но каждый раз, когда я создаю новый экземпляр, предыдущий исчезает.
Я думаю эта тема может иметь решение, но я не знаю, как это реализовать.