Python 3.x Python:关闭pyglet窗口

Python 3.x Python:关闭pyglet窗口,python-3.x,window,pyglet,openai-gym,Python 3.x,Window,Pyglet,Openai Gym,我在代码中使用了基于像素的环境。由于某些原因,我需要修改render函数。使用pyglet,我创建了自己的类ShowRender,其中包含render和close函数: 导入cv2 导入pyglet 从gym.envs.classic_控件导入渲染 类ShowRender(对象): 定义初始化(自): self.viewer=rendering.simplemageviewer() self.viewer.width=512 self.viewer.height=512 self.viewer.

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

导入cv2
导入pyglet
从gym.envs.classic_控件导入渲染
类ShowRender(对象):
定义初始化(自):
self.viewer=rendering.simplemageviewer()
self.viewer.width=512
self.viewer.height=512
self.viewer.window=pyglet.window.window(宽度=self.viewer.width,高度=self.viewer.height,
display=self.viewer.display,vsync=False,resizeable=True)
def渲染(自我、观察):
self.viewer.imshow(观察)
def关闭(自我):
self.viewer.close()
函数
render
工作正常:创建一个新窗口并显示环境像素。
但当我使用
close
功能时,窗口保持打开状态,不会消失。有没有建议把它关好?感谢添加此选项,使问题标记为已解决,在上面的评论中进行讨论后,解决方案非常简单。通过执行self.viewer.window.close(),在窗口对象上调用
.close()


不确定
gym
是如何工作的,或者
object
指的是什么。所以我不确定这个神奇的类是如何通过pyglet继承/实例化的。但通常它是一个调用的
on_close(self,*args)
事件,而不是实际的
close()
。所以试着在_close上实现
?我实际上只是在寻找一种方法来关闭
self.viewer.window
,即
pyglet.window
得到了它,我只需要添加
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()