minsu
minsu

Reputation: 91

Problem with VTK Chart interaction with PyQt

I'm trying to Draw VTK ChartXY using QVTKRenderWindowInteractor because my program is designed to use PyQt. Problem is, showing chart is good but, i can't interact with the chart for example, zoom, pan, hovering. When i tested identical chart show task without QVTKRenderWindowInteractor, then interact event was perfect.


Here is my reference Code.

from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from PyQt5.QtWidgets import QVBoxLayout, QWidget, QApplication, QPushButton
import matplotlib.pyplot as plt
import numpy as np
import vtk
import math
import sys
import os

app = QApplication(sys.argv)

widget = QVTKRenderWindowInteractor()
widget.Initialize()
widget.Start()

view = vtk.vtkContextView()
view.GetRenderer().SetBackground(1.0, 1.0, 1.0)
view.GetRenderWindow().SetSize(400, 300)

chart = vtk.vtkChartXY()
view.GetScene().AddItem(chart)
chart.SetShowLegend(True)

table = vtk.vtkTable()

arrX = vtk.vtkFloatArray()
arrX.SetName('X Axis')

arrC = vtk.vtkFloatArray()
arrC.SetName('Cosine')

arrS = vtk.vtkFloatArray()
arrS.SetName('Sine')

arrT = vtk.vtkFloatArray()
arrT.SetName('Sine-Cosine')

table.AddColumn(arrC)
table.AddColumn(arrS)
table.AddColumn(arrX)
table.AddColumn(arrT)

numPoints = 40

inc = 7.5 / (numPoints - 1)
table.SetNumberOfRows(numPoints)
for i in range(numPoints):
    table.SetValue(i, 0, i * inc)
    table.SetValue(i, 1, math.cos(i * inc))
    table.SetValue(i, 2, math.sin(i * inc))
    table.SetValue(i, 3, math.sin(i * inc) - math.cos(i * inc))

points = chart.AddPlot(vtk.vtkChart.POINTS)
points.SetInputData(table, 0, 1)
points.SetColor(0, 0, 0, 255)
points.SetWidth(1.0)
points.SetMarkerStyle(vtk.vtkPlotPoints.CROSS)

view.GetRenderWindow().SetMultiSamples(0)
view.GetInteractor().Initialize()
view.GetInteractor().Start()

widget.GetRenderWindow().AddRenderer(view.GetRenderer())
widget.setWindowTitle('Qt Widget')
widget.show()

exit(app.exec_())

This example show Pure VTK window and after closing VTK window show QtWidget window. The Pure VTK window interact perfectly with my commant, QtWidget interact not at all.

Is anybody know how to make VTK chart interact well with PyQt system?? Thanks.

Upvotes: 1

Views: 310

Answers (1)

minsu
minsu

Reputation: 91

Here is my own answer. VTKRenderWindowInteractor should get parameter manually iren, rw.

view = vtk.vtkContextView()
widget = VTKRenderWindowInteractor(iren=view.GetInteractor(), rw=view.GetRenderWindow())

then i could interact with my chart with Qt system well.


here is better and precise solution from VTK community.

You need just simply set RenderWindow.

https://discourse.vtk.org/t/problem-with-vtk-chart-interaction-with-pyqt/6561?u=hhebb

Upvotes: 1

Related Questions