- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了 vtk (8.1)、pyqt5 (5.10.1) 的问题。如果我将 vtkCallBackTimer 与“原始”vtk.vtkRenderWindowInteractor() 一起使用,则一切正常。但是,如果我使用 vtk.qt.QVTKRenderWindowInteractor.QVTKRenderWindowInteractor() 回调函数将连续执行,不会暂停。这是示例:
import sys
from PyQt5 import QtWidgets
import vtk
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from mainwindow import Ui_MainWindow
class vtkTimerCallback():
def __init__(self):
self.timer_count = 0
def execute(self, obj, event):
print(self.timer_count)
self.actor.SetPosition(self.timer_count, self.timer_count, 0)
iren = obj
iren.GetRenderWindow().Render()
self.timer_count += 1
class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super (ExampleApp, self).__init__(parent)
self.setupUi(self)
sphereSource = vtk.vtkSphereSource()
sphereSource.SetCenter(0.0, 0.0, 0.0)
sphereSource.SetRadius(5)
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(sphereSource.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor # <-- WOKRING
renderWindowInteractor = QVTKRenderWindowInteractor(self.frame) # <-- NOT WORKING (self.frame is a QFrame in the mainwindow.ui)
renderWindowInteractor.SetRenderWindow(renderWindow)
renderer.AddActor(actor)
renderer.SetBackground(1, 1, 1) # Background color white
renderWindow.Render()
renderWindowInteractor.Initialize()
cb = vtkTimerCallback()
cb.actor = actor
renderWindowInteractor.AddObserver('TimerEvent', cb.execute)
#****************
renderWindowInteractor.CreateRepeatingTimer(1000) #Pause between new function call in millisecs,
# with the QVTKRenderWindowInteractor the pause is ignored ?????
#****************
renderWindowInteractor.Start()
def main():
app = QtWidgets.QApplication(sys.argv)
trudeUI = ExampleApp()
trudeUI.show()
app.exec_()
if __name__ =='__main__':
main()
希望大家能帮忙。我需要动画的 RepeatingTimer 。如果某人。有替代方案也可以,但请不要使用 QtCore.QTimer。应该是vtk的东西...我已经尝试了 4 个小时了,欢迎任何帮助...
最佳答案
刚刚遇到了同样的问题。据我观察,这似乎是来自 QVTKRenderWindowInteractor 类的错误。创建重复计时器时,不考虑持续时间参数(示例中为 1000),而是使用默认参数 (10)。
为了解决这个问题,我创建了一个子类 MyQVTKRenderWindowInteractor
并覆盖了我需要的方法:
class MyQVTKRenderWindowInteractor(QVTKRenderWindowInteractor):
def __init__(self, *arg):
super(MyQVTKRenderWindowInteractor, self).__init__(*arg)
self._TimerDuration = 10 # default value
def CreateTimer(self, obj, event):
self._Timer.start(self._TimerDuration) # self._Timer.start(10) in orginal
def CreateRepeatingTimer(self, duration):
self._TimerDuration = duration
super(MyQVTKRenderWindowInteractor, self).GetRenderWindow().GetInteractor().CreateRepeatingTimer(duration)
self._TimeDuration = 10
现在renderWindowInteractor = MyQVTKRenderWindowInteractor(self.frame)
应该可以工作了。
跳跃的答案来得还不算晚++
关于python - 将 vtkTimerCallback 与 QVTKRenderWindowInteractor 一起使用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49786260/
我遇到了 vtk (8.1)、pyqt5 (5.10.1) 的问题。如果我将 vtkCallBackTimer 与“原始”vtk.vtkRenderWindowInteractor() 一起使用,则一
我是一名优秀的程序员,十分优秀!