On 29/03/13 15:14, David Yang wrote:
I have a main object with a Pyglet window as an attribute. Pylget's
window class has a method called push handlers, which lets me push
methods to the event stack. The following code works:
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())
The above code will spawn a new window at the default size and attach
the on_mouse_press() and on_draw event handlers to it. That works well
and good - however, trying to call on the push_handlers() method in
other classes doesn't seem to work.
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()
The above code spawns a new window, but it doesn't attach the menu
class's handlers. Is there a reason for this, or a workaround I can
use? Thanks!
That would be because you call pyglet.app.run (in __init__) before you
call m.menu and call GameItem.add so m.menu isn't called until you close
the window.
--
You received this message because you are subscribed to the Google Groups
"pyglet-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/pyglet-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.