带有Qt5的VTK-与窗口交互时计时器停止运行

时间:2018-07-11 12:44:34

标签: python qt vtk

我一直在尝试使用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返回到“操纵杆模式”,则问题返回:单击将永远停止计时器。

Python 3.6,VTK 8,Qt 5。

1 个答案:

答案 0 :(得分:1)

该问题在Linux 16.04,VTK8.1.1和Qt5.5.1。中均可重现。

在使用Qt时,解决问题的方法是使用QTimer()。如果您要使用计时,这是一个解决方案。

这是您将TimerEvent的{​​{1}}更改为最小的示例:

QTimer()