0

次のコードは、pygletが使用する通常のスタイル(デコレータを使用)の代替です。

on_draw()メソッドがここでどのように呼び出されるかを誰かが説明できますか?

import pyglet

class HelloWorldWindow(pyglet.window.Window): 
    def __init__(self):
        super(HelloWorldWindow, self).__init__() 
        self.label = pyglet.text.Label('Hello, world!') 

    def on_draw(self):
        self.clear() 
        self.label.draw() 

if __name__ == '__main__':
    window = HelloWorldWindow() 
    pyglet.app.run()

デコレータを使用して記述されたコードは、ここにあります。

4

1 に答える 1

4

ソースを掘り下げて答えを見つけることができます。

EventLoopクラス ( で使用) は、イベントを定期的にディスパッチします。pyglet.app.run()on_draw

ソースから:

呼び出しrunにより、アプリケーション イベント ループが開始されます。このループは、オペレーティング システム イベント、pyglet.clock.tickスケジュールされた関数と呼び出しを呼び出すための呼び出しpyglet.window.Window.on_draw、および pyglet.window.Window.flipウィンドウの内容を更新するための呼び出しを処理します。

Windowクラスは、このイベントをサブスクライブします。

BaseWindow.register_event_type('on_draw')

したがって、 をサブクラスWindow化することで、メソッドが確実on_drawに呼び出されるようになります。

pyglet のイベント システムがどのように機能するかの例については、プログラミング ガイドを参照してください。

于 2012-06-14T11:15:36.080 に答える