Search code examples
python-3.xwindowpygletopenai-gym

Python: close a pyglet window


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


Solution

  • 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()