Python Pyglet Window Force关闭

时间:2017-02-17 01:03:01

标签: python pyglet

我正在使用Python中的pyglet应用程序。它是一个图形模块,我用它来构建国际象棋游戏。我已经完成了代码,但我似乎无法关闭pyglet窗口。我的意图是在国王遇害时关闭窗户。我试过window.exit()。 “window”是我的pyglet窗口对象。我不知道还能去哪儿。我的代码是几千行,所以在这里发布它不会有用。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

window.exit()函数在pyglet中不存在,而是尝试使用window.close()。 你可以在app上调用exit函数:as pyglet.app.run()和pyglet.app.exit()

from pyglet.gl import *

class Triangle:
    def __init__(self):
        self.vertices = pyglet.graphics.vertex_list(3, ('v3f', [-0.5,-0.5,0.0, 0.5,-0.5,0.0, 0.0,0.5,0.0]),
                                                       ('c3B', [100,200,220, 200,110,100, 100,250,100]))

class MyWindow(pyglet.window.Window):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.set_minimum_size(400, 300)
        glClearColor(0.2, 0.3, 0.2, 1.0)

        self.triangle = Triangle()

    def on_draw(self):
        self.clear()
        self.triangle.vertices.draw(GL_TRIANGLES)

    def on_resize(self, width, height):
        glViewport(0, 0, width, height)

    def exit_callback(self, dt):
        self.close()


if __name__ == "__main__":
    window = MyWindow(400, 400, "My Pyglet Window", resizable=True)
    pyglet.clock.schedule_once(window.exit_callback , 2) 
    pyglet.app.run()

上面的代码将在2秒后关闭窗口。

答案 1 :(得分:1)

@Attila_Toth答案应该有效,但我会添加它并在pyglet.app.run()类中创建自定义pyglet.window.Window循环:

import pyglet
from pyglet.gl import *

key = pyglet.window.key

class main(pyglet.window.Window):
    def __init__ (self):
        super(main, self).__init__(800, 800, fullscreen = False)
        self.x, self.y = 0, 0

        #self.bg = Spr('background.jpg')

        self.alive = 1


    def on_draw(self):
        self.render()

    def on_close(self):
        self.alive = 0

    def on_key_press(self, symbol, modifiers):
        if symbol == key.ESCAPE: # [ESC]
            self.alive = 0

    def render(self):
        self.clear()

        #self.bg.draw()

        self.flip()

    def run(self):
        while self.alive == 1:
            self.render()

            # -----------> This is key <----------
            # This is what replaces pyglet.app.run()
            # but is required for the GUI to not freeze
            #
            event = self.dispatch_events()

x = main()
x.run()

此示例将让您在按 Escape 或按窗口管理器中的关闭按钮时关闭窗口。