pyqt5 - VTK Chart 与 PyQt 交互的问题
问题描述
我正在尝试使用绘图VTK ChartXY
,QVTKRenderWindowInteractor
因为我的程序旨在使用PyQt
. 问题是,显示图表很好,但我can't interact
使用图表,例如缩放、平移、悬停。当我在没有 QVTKRenderWindowInteractor 的情况下测试相同的图表显示任务时,交互事件是完美的。
这是我的参考代码。
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_())
此示例显示Pure VTK window
并在关闭 VTK 窗口后显示QtWidget window
。Pure VTK 窗口与我的命令完美交互,QtWidget 完全不交互。
有人知道如何使 VTK 图表与 PyQt 系统很好地交互吗?谢谢。
解决方案
这是我自己的答案。VTKRenderWindowInteractor 应该手动获取参数iren
,rw
。
view = vtk.vtkContextView()
widget = VTKRenderWindowInteractor(iren=view.GetInteractor(), rw=view.GetRenderWindow())
然后我可以用 Qt 系统很好地与我的图表交互。
这是来自 VTK 社区的更好更精确的解决方案。
您只需简单地设置 RenderWindow。
https://discourse.vtk.org/t/problem-with-vtk-chart-interaction-with-pyqt/6561?u=hhebb
推荐阅读
- swift - Xcode 上传错误:“validateAssets (1272)”?
- git - 无法添加自己的 github repo 的 composer 依赖项
- javascript - 将数字四舍五入到小数点后 2 位 JS
- perl - Perl:变量值是“glob”,但应该是“标量”
- c++ - 尝试使用 STD C++ 中的“cyl_bessel_i”
- tensorflow - 提取用于语义分割的训练图像和掩码的 2D 图像块
- postscript - 后记中如何对对象进行分组?
- c++ - 在 C++ 中将 txt 文件转换为 JSON
- python - Python SymPy 块矩阵类型错误
- vb.net - VB.Net在一个类的一个实例中更改属性的值,在另一个实例中更改它