I was able to get it to work with pylget.app.run() by adding 
self.dispatch_event('on_draw') to the toggle method in my window class. Is 
this the proper approach?

On Friday, December 9, 2016 at 10:13:51 AM UTC-5, Gregory Howland wrote:
>
> Hi. I'm new to pyglet and having a little difficulty understanding how 
> pyglet.app.run() updates multiple windows, particularly windows that are 
> not the active window. 
>
> I am trying to write a simple program that does the following.
>
>    1. Creates 2 windows that are initially colored all white. 
>    2. If the user presses the key "1", it should toggle the first window 
>    between white and black and print "1" to the console.
>    3. If the user presses the key "2", it should toggle the second window 
>    between white and black and print "2" to the console
>
> The toggling behavior should occur for either window regardless of what 
> window is active (i.e., if window 1 is active and the user presses "2", the 
> color of window 2 should toggle)
>
> import pyglet
> from pyglet.window import key
> from pyglet.gl import *
>
> class ToggleWindow(pyglet.window.Window):
>
>     def __init__(self):
>         super(ToggleWindow, self).__init__()
>         self.color = 1.0
>
>     def toggle(self):
>         if self.color == 1.0:
>             self.color = 0.0
>         else:
>             self.color = 1.0
>       
>     def on_draw(self):
>         self.switch_to()
>         
>         glClear(GL_COLOR_BUFFER_BIT)
>         glLoadIdentity()
>         glColor3f(self.color,self.color,self.color)
>         glBegin(GL_QUADS)
>         glVertex2f(0,0)
>         glVertex2f(self.width,0)
>         glVertex2f(self.width,self.height)
>         glVertex2f(0,self.height)
>         glEnd()
>
> def main():
>
>     window1 = ToggleWindow()
>     window2 = ToggleWindow()
>
>     @window1.event
>     @window2.event
>     def on_key_press(symbol, modifiers):
>         if symbol == key._1:
>             print(1)
>             window1.toggle()
>         elif symbol == key._2:
>             print(2)
>             window2.toggle()
>         else:
>             print(symbol)
>     
>     pyglet.app.run()
>
>             
> if __name__ == "__main__":
>     main()
>
>
> The problem is that only the active window color will toggle. Is there 
> some event I have to dispatch to get the render loop to redraw an inactive 
> window? I thought maybe the "switch_to()" method would do this but I guess 
> it only changes the opengl context?
>
> I can get the program to work as intended if I replace pyglet.app.run() 
> with a manual render loop like I might do in SDL, but this is obviously the 
> sort of thing pyglet is designed to avoid.
>
> while True:
>         pyglet.clock.tick()
>
>         for window in pyglet.app.windows:
>             window.switch_to()
>             window.dispatch_events()
>             window.dispatch_event('on_draw')
>             window.flip()
>
>
>  
> Any thoughts? I am on linux if it is relevant.
>
> Thanks in advance for any help.
>
>
>

-- 
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 https://groups.google.com/group/pyglet-users.
For more options, visit https://groups.google.com/d/optout.

Reply via email to