I haven't really used pyglet with more than one window myself, but there 
shouldn't be anything wrong with doing it that way.



On Saturday, December 10, 2016 at 1:08:38 AM UTC+9, Gregory Howland wrote:
>
> 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