属性として Pyglet ウィンドウを持つメイン オブジェクトがあります。Pylget のウィンドウ クラスには、プッシュ ハンドラーと呼ばれるメソッドがあり、これを使用してメソッドをイベント スタックにプッシュできます。次のコードが機能します。
import pyglet
class main:
win = None
gameItems = {}
def __init__(self, window):
self.win = window
gameItem.win = self.win
self.gameItems["menu"] = menu()
self.gameItems["menu"].add()
pyglet.app.run()
class gameItem:
win = None
def add(self):
self.win.push_handlers(self)
class menu(gameItem): ##I actually have multiple objects inheriting from gameItem, this is just one of them.
def on_mouse_press(self, x, y, button, modifier):
'''on_mouse_press() is an accepted handler for the window object.'''
print(x)
print(y)
def on_draw(self):
'''With a quick draw function, so I can see immediately
that the handlers are getting pushed.'''
pyglet.graphics.draw(4, pyglet.gl.GL_QUADS, ('v2i', (256,350,772,350,772,450,256,450)))
m = main(pyglet.window.Window())
上記のコードは、デフォルト サイズで新しいウィンドウを生成し、on_mouse_press() および on_draw イベント ハンドラーをそれにアタッチします。それはうまく機能しますが、他のクラスで push_handlers() メソッドを呼び出そうとしても機能しないようです。
import pyglet
class Main:
win = None
gameItems = {}
def __init__(self, window):
self.win = window
GameItem.game = self
GameItem.win = self.win
self.gameItems["main"] = MainMenu()
pyglet.app.run()
def menu(self):
self.gameItems["main"].add()
class GameItem:
win = None
def add(self):
self.win.push_handlers(self)
class MainMenu(GameItem): ##I actually have multiple objects inheriting from gameItem, this is just one of them.
def on_mouse_press(self, x, y, button, modifier):
'''on_mouse_press() is an accepted handler for the window object.'''
print(x)
print(y)
def on_draw(self):
'''With a quick draw function, so I can see immediately
that the handlers are getting pushed.'''
pyglet.graphics.draw(4, pyglet.gl.GL_QUADS, ('v2i', (256,350,772,350,772,450,256,450)))
m = Main(pyglet.window.Window(width=1024, height=768))
m.menu()
上記のコードは新しいウィンドウを生成しますが、メニュー クラスのハンドラをアタッチしません。これには理由がありますか、または使用できる回避策はありますか? ありがとう!