I am using a pixel based gym environment in my code. For some reasons, I need to modify the render
function. Using pyglet
, I have created my own class ShowRender
with a render
and a close
function:
import cv2
import pyglet
from gym.envs.classic_control import rendering
class ShowRender(object):
def __init__(self):
self.viewer = rendering.SimpleImageViewer()
self.viewer.width = 512
self.viewer.height = 512
self.viewer.window = pyglet.window.Window(width=self.viewer.width, height=self.viewer.height,
display=self.viewer.display, vsync=False, resizable=True)
def render(self, observation):
self.viewer.imshow(observation)
def close(self):
self.viewer.close()
Function render
works perfectly: a new window is created and displays the environment's pixels.
But when I use close
function, the window stays open and does not disappear. Any advice to close it properly ? Thanks
Adding this so the question becomes marked as solved, after discussions in the comments above, the solution is pretty simple. calling .close()
on the window object helped by doing self.viewer.window.close()
:
import cv2
import pyglet
from gym.envs.classic_control import rendering
class ShowRender(object):
def __init__(self):
self.viewer = rendering.SimpleImageViewer()
self.viewer.width = 512
self.viewer.height = 512
self.viewer.window = pyglet.window.Window(width=self.viewer.width, height=self.viewer.height,
display=self.viewer.display, vsync=False, resizable=True)
def render(self, observation):
self.viewer.imshow(observation)
def close(self):
self.viewer.window.close()