我在代码中使用的是基于像素的gym环境。由于某些原因,我需要修改render
函数。使用pyglet
,我使用ShowRender
和render
函数创建了自己的类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.close()
功能render
可以正常工作:创建一个新窗口并显示环境的像素。但是当我使用close
功能时,窗口保持打开状态并且不会消失。有什么建议可以正确关闭它吗?谢谢
[添加此内容后,问题被标记为已解决,在上面的评论中进行讨论之后,解决方案非常简单。通过执行.close()
在窗口对象上调用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()