2017-02-17 3 views
0

Ich arbeite an einer Pyglet-Anwendung in Python. Es ist ein Grafikmodul, und ich benutze es, um ein Schachspiel zu bauen. Ich habe den Code beendet, aber ich kann das Pyglet-Fenster nicht schließen. Ich hatte die Absicht, das Fenster zu schließen, wenn ein König getötet wurde. Ich habe window.exit() versucht. "window" ist mein Pyglet-Fensterobjekt. Ich bin mir nicht sicher, wohin ich sonst gehen soll. Mein Code ist mehrere tausend Zeilen, so dass es hier nicht nützlich wäre. Irgendwelche Vorschläge würden geschätzt werden.Python Pyglet Window Force schließen

Antwort

1

window.exit() Funktion existiert nicht in Pyglet, stattdessen versuchen window.close(). Sie können die Exit-Funktion in der App aufrufen: als pyglet.app.run() und 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() 

Der obige Code wird das Fenster nach 2 Sekunden schließen.

1

@Attila_Toth Antwort sollte funktionieren, aber ich werde auf sich hinzufügen und einem benutzerdefinierten pyglet.app.run() Schleife innerhalb der pyglet.window.Window Klasse erstellen:

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

Dieses Beispiel können Sie Ihre Fenster zu schließen beim Drücken Flucht oder wenn Sie drücken die Schließen-Taste in Ihrem Fenstermanager.