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

2024-09-19 20:32:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试用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。在


Tags: fromimportappmessageqt计时器vtktick
1条回答
网友
1楼 · 发布于 2024-09-19 20:32:05

这个问题在Linux 16.04、VTK8.1.1和Qt5.5.1中是可重现的。在

使用Qt时,解决问题的方法是使用QTimer()。如果你想把握时机,这是一个解决办法。在

这是为QTimer()更改TimerEvent的最小示例:

import vtk
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from PyQt5 import Qt
from PyQt5.QtCore import QTimer

message = "tick"
def onTimerEvent():
    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)
timer = QTimer()
timer.timeout.connect(onTimerEvent)
timer.start(100)
mainWindow.show()
app.exec_()

相关问题 更多 >