Python: 关闭一个 pyglet window
Python: close a pyglet window
我在代码中使用基于像素的 gym 环境。由于某些原因,我需要修改 render
函数。使用 pyglet
,我创建了自己的 class 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
完美运行:创建了一个新的 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()
我在代码中使用基于像素的 gym 环境。由于某些原因,我需要修改 render
函数。使用 pyglet
,我创建了自己的 class 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
完美运行:创建了一个新的 window 并显示环境的像素。
但是当我使用 close
功能时, window 保持打开状态并且不会消失。有什么建议可以正确关闭它吗?谢谢
加上这个,问题就被标记为已解决,经过上面评论的讨论,解决方案很简单。通过 self.viewer.window.close()
:
.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()