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.