我一直在尝试用VTK制作动画,所以我一直在使用TimerEvent。当我试图移到Qt绑定时,它断了。问题是,只要我与视图交互(比如滚动缩放或单击旋转),计时器就会停止。下面是一个简单的最小示例:
import vtk
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from PyQt5 import Qt
message = "tick"
def onTimerEvent(object, event):
global message
print(message)
if message == "tick":
message = "tock"
else:
message = "tick"
app = Qt.QApplication([])
mainWindow = Qt.QMainWindow()
renderer = vtk.vtkRenderer()
vtkWidget = QVTKRenderWindowInteractor(mainWindow)
vtkWidget.GetRenderWindow().AddRenderer(renderer)
mainWindow.setCentralWidget(vtkWidget)
vtkWidget.GetRenderWindow().GetInteractor().Initialize()
timerId = vtkWidget.CreateRepeatingTimer(100)
vtkWidget.AddObserver("TimerEvent", onTimerEvent)
mainWindow.show()
app.exec_()
这个脚本应该一遍又一遍地显示单词“tick”和“tock”,但是只要您在窗口内单击就停止了。在
一个奇怪的行为是按“T”切换到轨迹球交互方式似乎有一些效果。如果我按下T,然后在窗口内点击,计时器只会在我点击时停止运行:当我放手时,它会再次启动。如果我按J键回到“操纵杆模式”,问题又来了:点击会永远停止计时器。在
Python3.6、VTK 8、Qt5。在
这个问题在Linux 16.04、VTK8.1.1和Qt5.5.1中是可重现的。在
使用Qt时,解决问题的方法是使用
QTimer()
。如果你想把握时机,这是一个解决办法。在这是为
QTimer()
更改TimerEvent
的最小示例:相关问题 更多 >
编程相关推荐