我在vtk(8.1)、pyqt5(5.10.1)上遇到问题。如果我将vtkCallBackTimer与“原始”vtk.vtkrenderWindowInteractior()一切正常。但如果我用vtk.qt.qvtkrenderWindowInteractior.qvtkrenderWindowInteractior()回调函数连续执行,不停顿。示例如下:
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()
我希望任何人都能帮忙。我需要一个动画的重复时间。如果某人。但这不是一个好的选择QtCore.QTimer,请。应该是vtk的事。。。 我已经试了4个小时了,欢迎任何帮助。。。在
只是有同样的问题。据我所知,它似乎是来自
QVTKRenderWindowInteractor
类的bug。 在创建重复计时器时,不考虑duration参数(在您的示例中为1000),而是使用默认参数(10)。在为了解决这个问题,我创建了一个子类
MyQVTKRenderWindowInteractor
,并重写了我需要的方法:现在
renderWindowInteractor = MyQVTKRenderWindowInteractor(self.frame)
应该可以工作了。在蹦蹦跳跳的回答还没来得及 ++在
相关问题 更多 >
编程相关推荐