Thank you both, I will go for the threaded approach! On Jul 19, 4:43 am, Gary Herron <[email protected]> wrote: > On 07/18/2011 06:32 AM, Taco wrote: > > > Thanks for your reply Mike, > > > I'm on Ubuntu linux. The reason I don't want to start the pyglet event > > loop is because I want to be able to interact with the program through > > the interpreter while it is running, but interpreter input is blocked > > while the event loop is running. > > > Is it possible to handle the events triggered by draw() et al. just > > once after calling them and then returning to the interpreter again? > > Should I just start the normal event loop for one frame, or will this > > result in a large overhead for starting/stopping? > > Better than that (perhaps) is this: You can start the pyglet event loop > and all its graphics operations in a separate thread, and leave the main > thread running the interpreter: > > This tiny example starts the pyglet Hello World app in a thread and > keeps the interactive interpreter running in the main thread. Both are > active and neither interferes with the other. The down side, of > course, is that any communication between the two threads (say in > response to your interactive input) needs to be done in a thread safe > manner. (locks, semaphores, queues, ...) > > To run, store in a file, run the interpreter, import that file and type > go(). > > def App(): > import pyglet > window = pyglet.window.Window() > label = pyglet.text.Label('Hello, world', > font_name='Times New Roman', font_size=36, > x=window.width//2, y=window.height//2, > anchor_x='center', anchor_y='center') > @window.event > def on_draw(): > window.clear() > label.draw() > pyglet.app.run() > > import thread > def go(): > thread.start_new_thread(App, ()) > > Gary Herron > > > > > > > > > Also, any idea why the call to pg.app.run wont work when I do it in > > the interpreter as opposed to in the __main__ block? > > > On Jul 18, 2:44 pm, Mike Redhorse<[email protected]> wrote: > >> The first example won't work because the draw(), clear(), etc > >> functions, are triggering events. With no running event loop, nothing > >> will happen. I don't understand why you're not calling app.run() > >> though. A running event loop shouldn't hurt you at all, surely? > > >> Also, what OS are you on? Event loops differ based on OS. > > >> You could also make your own event loop, and ignore any events you > >> aren't looking for. > > >> On Jul 18, 1:17 pm, Taco<[email protected]> wrote: > > >>> Hi there, > >>> I've been playing around with pyglet in order to get some offscreen > >>> rendering to work. I want to render simple shapes and convert them to > >>> numpy arrays. Following the advice given > >>> inhttp://groups.google.com/group/pyglet-users/browse_thread/thread/71cb... > >>> , I created an invisible window and didn't call app.run(). For now, > >>> I'm just rendering on screen. My code looks something like this: > >>> window = pg.window.Window(visible = False) > >>> window.set_size(10,10) > >>> window.clear() > >>> drawTriangle( ) > >>> window.flip() > >>> x = screenAsArray() # Does a screencapture and converts to numpy array > >>> This doesn't work, so I thought that maybe I could just start and stop > >>> the event loop for one frame whenever needed. So I tried something > >>> like this: > >>> if __name__ == "__main__": > >>> window = pg.window.Window()#visible = False) > >>> window.set_size(10,10) > >>> @window.event > >>> def on_draw(): > >>> window.clear() > >>> drawTriangle() > >>> x = screenAsArray() > >>> pg.app.exit() > >>> pg.app.run() > >>> This works, but ONLY if I make the pg.app.run call where it is in the > >>> above example. When I place it in another function or enter it in the > >>> interpreter, it doesn't work. It does work when I leave the run call > >>> where it is, so that it renders one frame, and then call pg.app.run > >>> again in the interpreter later.. Does anyone know what's going on > >>> here? > >>> I would preferably get the first method to work. It seems like app.run > >>> does some initialization work that I'm not doing in the first code > >>> snippet above. > >>> Any help is appreciated.
-- You received this message because you are subscribed to the Google Groups "pyglet-users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/pyglet-users?hl=en.
