QVTKRenderWindowInteractor does not work with QWebEnginView
When i try to use QVTKRenderWindowInteractor and QWebEngineView in one application, the whole application breaks. No proper content is drawn in the main window and only some glitches appear.
In the terminal the following logs are produced:
QOpenGLContext::makeCurrent() called with non-opengl surface 0x56440d496570
QRhiGles2: Failed to make context current. Expect bad things to happen.
python 3.11.3
PySide6 == 6.5.1.1
vtk == 9.2.6
Reproducer:
import sys
from typing import Any
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout
from PySide6.QtWebEngineWidgets import QWebEngineView
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper, vtkRenderer
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
class RenderWidget(QWidget):
def __init__(self) -> None:
super().__init__()
self.vtk = QVTKRenderWindowInteractor(self)
ren = vtkRenderer()
self.vtk.GetRenderWindow().AddRenderer(ren)
cone = vtkConeSource()
cone.SetResolution(8)
coneMapper = vtkPolyDataMapper()
coneMapper.SetInputConnection(cone.GetOutputPort())
coneActor = vtkActor()
coneActor.SetMapper(coneMapper)
ren.AddActor(coneActor)
self.vtk.Initialize()
self.vtk.Start()
class App(QApplication):
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
def run(self) -> None:
self.exec()
class MainWidget(QWidget):
def __init__(self, parent: QWidget | None = None) -> None:
super().__init__(parent)
self._layout = QVBoxLayout()
self.setLayout(self._layout)
self.vtk_view = RenderWidget()
self._layout.addWidget(self.vtk_view)
self.web_view = QWebEngineView(self)
self._layout.addWidget(self.web_view)
def main(argv: Any) -> None:
app = App(argv)
window = QMainWindow()
# create the widget
widget = MainWidget()
window.setCentralWidget(widget)
window.show()
app.run()
if __name__ == "__main__":
main(sys.argv)