Unable to create vtk view with selectable renderer

My intention is to click between different sources. Usually it works for first few clicks, but then breaks.
Minimal example here
source_data.py

import vtk

class SourceData:
    def __init__(self):
        self.blocks = {}
        self.blocks["sphere"] = self._create_sphere()
        self.blocks["cylinder"] = self._create_cylinder()
        
        
    def _create_sphere(self):
        sphere_source = vtk.vtkSphereSource()
        sphere_source.SetCenter(0.0, 0.0, 0.0);
        sphere_source.SetRadius(5.0);
        sphere_source.Update()
        
        append_filter = vtk.vtkAppendFilter()
        append_filter.AddInputData(sphere_source.GetOutput())
        append_filter.Update()
        
        ugrid = vtk.vtkUnstructuredGrid()
        ugrid.ShallowCopy(append_filter.GetOutput())
        return ugrid
        
    def _create_cylinder(self):
        cylinder_source = vtk.vtkCylinderSource()
        cylinder_source.SetCenter(0.0, 0.0, 0.0);
        cylinder_source.SetRadius(5.0);
        cylinder_source.Update()
        
        append_filter = vtk.vtkAppendFilter()
        append_filter.AddInputData(cylinder_source.GetOutput())
        append_filter.Update()
        
        ugrid = vtk.vtkUnstructuredGrid()
        ugrid.ShallowCopy(append_filter.GetOutput())
        return ugrid
        
            
    def get_unstructured_grid(self, block_names):
        if not block_names:
            return vtk.vtkUnstructuredGrid()
        appendFilter = vtk.vtkAppendFilter()
        for bl in block_names: 
            appendFilter.AddInputData(self.blocks[bl])
        appendFilter.Update()
        unstructuredGrid=vtk.vtkUnstructuredGrid()
        unstructuredGrid.ShallowCopy(appendFilter.GetOutput())
        return unstructuredGrid

    def get_block_names(self):
        res = []
        for bl in self.blocks:
            res.append(bl)
        return res
        
    def get_renderer(self, block_names):
        ugrid = self.get_unstructured_grid(block_names)
        mapper = vtk.vtkDataSetMapper()
        mapper.SetInputData(ugrid)
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        # Renderer
        renderer = vtk.vtkRenderer()
        renderer.AddActor(actor)
        return renderer

executed script:

import vtk
from vtk.util.colors import tomato
import panel as pn

import resultData
import source_data
colors = vtk.vtkNamedColors()

def callback(event):
    if event.name == "value":
        new_renderer = result_data.get_renderer(event.new)
        geom_pane.object.RemoveRenderer(geom_pane.object.GetRenderers().GetFirstRenderer())
        geom_pane.object.AddRenderer(new_renderer)
        geom_pane.synchronize()
        
result_data = source_data.SourceData()

checkbox_group = pn.widgets.CheckBoxGroup(
    name='Select Domains Group', value=['sphere'], options=result_data.get_block_names())

renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(result_data.get_renderer(checkbox_group.value))

checkbox_group.param.watch(callback, ['value'], onlychanged=True)

geom_pane = pn.pane.VTK(renWin, width=500, height=500)

combined = pn.Row(geom_pane, checkbox_group).servable()

combined.show()

Using python 3.10.5 on windows.

Any ideas what could be wrong?