2017-02-17 6 views
0

私はPythonでPygletアプリケーションを開発しています。それはグラフィックスモジュールであり、チェスゲームを構築するために使っています。私はコードを終えましたが、ピグレットウィンドウを閉じることはできません。私の意図は、王が殺されたときに窓を閉めることでした。私はwindow.exit()を試しました。 "window"は私のpygletウィンドウオブジェクトです。私はどこに行くべきか分からない。私のコードは数千行なので、ここに投稿すると便利ではないでしょう。任意の提案をいただければ幸いです。Python Pyglet Window強制終了

答えて

1

pygletにwindow.exit()関数が存在しません。代わりにwindow.close()を試してください。上記のコードは2秒後にウィンドウを閉じます

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

)((pyglet.app.runとして)とpyglet.app.exit: あなたはアプリ上でexit関数を呼び出すことができます。

1

@Attila_Toth応答動作するはずですが、私はそれに追加してpyglet.window.Windowクラス内のカスタムpyglet.app.run()ループを作成します:

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

この例ではエスケープとき、またはを押したとき、あなたのウィンドウを閉じるようになりますウィンドウマネージャの閉じるボタンを押します。

関連する問題