Python: 关闭一个 pyglet window

Python: close a pyglet window

我在代码中使用基于像素的 gym 环境。由于某些原因,我需要修改 render 函数。使用 pyglet,我创建了自己的 class ShowRender,其中包含 renderclose 函数:

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 完美运行:创建了一个新的 window 并显示环境的像素。 但是当我使用 close 功能时, window 保持打开状态并且不会消失。有什么建议可以正确关闭它吗?谢谢

加上这个,问题就被标记为已解决,经过上面评论的讨论,解决方案很简单。通过 self.viewer.window.close():

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