如何解决当应用程序窗口打开或移动时,Python / VTK脚本在Windows中崩溃,导致Spyder内核崩溃
Python 3.8.5 VTK 9.0.1 Spyder 4.1.5 Windows 10 Home(新安装)
以下(借用的)脚本会产生一个像圆锥体一样旋转360度的对象-或者应该:
import vtk
import time
cone = vtk.vtkConeSource()
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(cone.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
renderer.ResetCamera()
camera = renderer.GetActiveCamera()
window = vtk.vtkRenderWindow()
window.AddRenderer(renderer)
azimuth = 0
while 1:
window.Render()
if azimuth >= 360:
azimuth = 0
azimuth += 0.1
camera.Azimuth(azimuth)
time.sleep(0.1)
在运行时会创建一个新窗口,但仅在工具栏中将其最小化(白色矩形)。
如果我将新窗口保留为工具栏中的图标,但将鼠标悬停在上面,则会看到圆锥体应按其旋转的方向。但是,如果我通过单击鼠标来打开窗口,则窗口将冻结,并且锥体最终会崩溃,并显示以下消息:
[SpyderKernelApp]警告|没有这样的通讯:每次都使用不同的十六进制值的f7a8b494237011ebb6f90c8bfdf07845。
如果我直接在CMD窗口中运行相同的脚本,则该窗口将完全打开,并且视锥细胞按应有的方式旋转,而不会导致随后的内核崩溃。但是,如果我再移动窗口,圆锥将停止并且内核崩溃,并且看不到任何消息。
因此问题似乎与随后在桌面上移动窗口有关。
解决方法
几年前,我使用paraview在python 2.7下发现了类似的问题:
Render() causes a non responding window
这导致我使用交互器重新编写脚本:
import vtk
import time
import sys
class vtkTimerCallback():
def __init__(self):
self.timer_count = 0
self.Azimuth = 0
def execute(self,obj,event):
iren = obj
iren.GetRenderWindow().Render()
if self.Azimuth >= 360:
self.Azimuth = 0
self.Azimuth += 0.1
camera.Azimuth(self.Azimuth)
cone = vtk.vtkConeSource()
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(cone.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
renderer.ResetCamera()
camera = renderer.GetActiveCamera()
window = vtk.vtkRenderWindow()
window.SetSize(600,600)
window.AddRenderer(renderer)
istyle = vtk.vtkInteractorStyleSwitch()
istyle.SetCurrentStyleToTrackballCamera()
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(window)
interactor.SetInteractorStyle(istyle)
interactor.Initialize()
Bingo可以很好地工作-能够用鼠标重新放置旋转圆锥体带来了更多乐趣。
因此,解决方法就位了-很想知道...的原因
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。