# vtkInteractorStyleImage do not work in QVTKWidget

**URL:** https://discourse.vtk.org/t/vtkinteractorstyleimage-do-not-work-in-qvtkwidget/6358
**Category:** Support
**Created:** [August 11, 2021, 1:52pm UTC](https://discourse.vtk.org/t/vtkinteractorstyleimage-do-not-work-in-qvtkwidget/6358 "2021-08-11T13:52:10Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![zhang-qiang-github](https://discourse.vtk.org/user_avatar/discourse.vtk.org/zhang-qiang-github/32/2519_2.png) [@zhang-qiang-github](https://discourse.vtk.org/u/zhang-qiang-github)
#### Post date: [August 11, 2021, 1:52pm UTC](https://discourse.vtk.org/t/vtkinteractorstyleimage-do-not-work-in-qvtkwidget/6358/1 "2021-08-11T13:52:10Z")

</div>

I find `vtkInteractorStyleImage` do not work in `QVTKWidget`.

For example, the following code:

```auto
import vtk
from vtk.util.numpy_support import vtk_to_numpy, numpy_to_vtk
import numpy as np

def numpyToVTK(data):
    if len(data.shape) == 2:
        data = data[:, :, np.newaxis]
    flat_data_array = data.transpose(2,1,0).flatten()
    vtk_data = numpy_to_vtk(num_array=flat_data_array, deep=True, array_type=vtk.VTK_FLOAT)
    shape = data.shape

    img = vtk.vtkImageData()
    img.GetPointData().SetScalars(vtk_data)
    img.SetDimensions(shape[0], shape[1], shape[2])
    return img

img = np.zeros(shape=[512, 512])

img[0:256, 0:256] = 0
img[0:256, 256:] = 64
img[256:, 0:256] = 128
img[256:, 256:] = 256

img = numpyToVTK(img)

imgActor = vtk.vtkImageActor()
imgActor.SetInputData(img)

renderer = vtk.vtkRenderer()
renderer.AddActor(imgActor)
renderer.SetBackground(0.4, 0.5, 0.6)

renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindow.Render()
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
style = vtk.vtkInteractorStyleImage()
renderWindowInteractor.SetInteractorStyle(style)
renderWindowInteractor.SetRenderWindow(renderWindow)
renderWindowInteractor.Initialize()
renderWindowInteractor.Start()

```

I can’t rotate the image, because the `vtkInteractorStyleImage` is used.

But, if I want to use `vtkInteractorStyleImage` in `QVTKWidget`, for example:

```auto
import vtk
from vtk.util.numpy_support import vtk_to_numpy, numpy_to_vtk
import numpy as np

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor

def numpyToVTK(data):
    if len(data.shape) == 2:
        data = data[:, :, np.newaxis]
    flat_data_array = data.transpose(2,1,0).flatten()
    vtk_data = numpy_to_vtk(num_array=flat_data_array, deep=True, array_type=vtk.VTK_FLOAT)
    shape = data.shape

    img = vtk.vtkImageData()
    img.GetPointData().SetScalars(vtk_data)
    img.SetDimensions(shape[0], shape[1], shape[2])
    return img

img = np.zeros(shape=[512, 512])

img[0:256, 0:256] = 0
img[0:256, 256:] = 64
img[256:, 0:256] = 128
img[256:, 256:] = 256

img = numpyToVTK(img)

class Widget(QWidget):

    def __init__ (self):
        super(). __init__ ()

        layout = QVBoxLayout()
        self.setLayout(layout)
        self.vtkWidget = QVTKRenderWindowInteractor()
        layout.addWidget(self.vtkWidget)

        imgActor = vtk.vtkImageActor()
        imgActor.SetInputData(img)

        renderer = vtk.vtkRenderer()
        renderer.AddActor(imgActor)
        renderer.SetBackground(0.4, 0.5, 0.6)

        renderWindow = self.vtkWidget.GetRenderWindow()
        renderWindow.AddRenderer(renderer)
        renderWindow.Render()
        renderWindowInteractor = vtk.vtkRenderWindowInteractor()
        style = vtk.vtkInteractorStyleImage()
        renderWindowInteractor.SetInteractorStyle(style)
        renderWindowInteractor.SetRenderWindow(renderWindow)
        renderWindowInteractor.Initialize()

if __name__ == ' __main__':

    app = QApplication(sys.argv)
    win = Widget()
    win.show()
    app.exec_()

```

I find I can rotate the image in the `QVTKWidget` even the `vtkInteractorStyleImage` is used.

My environment is:

```auto
python 3.7
vtk 9.0.3
win 10

```

How can I apply `vtkInteractorStyleImage` in `QVTKWidget`?

---

<div class="post-metadata">

### Author: ![dgobbi](https://discourse.vtk.org/user_avatar/discourse.vtk.org/dgobbi/32/18_2.png) [@dgobbi](https://discourse.vtk.org/u/dgobbi)
#### Post date: [August 13, 2021, 3:51am UTC](https://discourse.vtk.org/t/vtkinteractorstyleimage-do-not-work-in-qvtkwidget/6358/2 "2021-08-13T03:51:00Z")

</div>

Replace this:

```python
        renderWindowInteractor = vtk.vtkRenderWindowInteractor()
        style = vtk.vtkInteractorStyleImage()
        renderWindowInteractor.SetInteractorStyle(style)
        renderWindowInteractor.SetRenderWindow(renderWindow)
        renderWindowInteractor.Initialize()

```

with this:

```auto
        style = vtk.vtkInteractorStyleImage()
        self.vtkWidget.SetInteractorStyle(style)

```

The QVTKRenderWindowInteractor acts as a vtkRenderWindowInteractor (to be more specific, it uses a vtkGenericRenderWindowInteractor that processes Qt events).

That is why the class is called “QVTKRenderWindowInteractor”: it is a vtkRenderWindowInteractor (via duck typing), and it is also a Qt widget.

---

<div class="post-metadata">

### Author: ![zhang-qiang-github](https://discourse.vtk.org/user_avatar/discourse.vtk.org/zhang-qiang-github/32/2519_2.png) [@zhang-qiang-github](https://discourse.vtk.org/u/zhang-qiang-github)
#### Post date: [August 13, 2021, 5:24am UTC](https://discourse.vtk.org/t/vtkinteractorstyleimage-do-not-work-in-qvtkwidget/6358/3 "2021-08-13T05:24:06Z")

</div>

Thank you very much, It is work.
