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 回答