![](https://secure.gravatar.com/avatar/3a6c2451f75d3309b1252476a8f6a4a6.jpg?s=120&d=mm&r=g)
On Aug 26, 2008, at 7:25 PM, Zachary Pincus wrote:
Another option, depending on how much plumbing you're interested in, is to write a custom tool with OpenGL...
I've been using Pyglet for some rather-specialized data display needs (blit live video from a microscope + plot derived measures on top of the video, using the mouse to pan and zoom), and it's pretty nice. Basically, Pyglet is a (pretty simple) pure-python, ctypes-based, multiplatform interface to OpenGL, windowing, and mouse/keyboard IO. It's quite hackable, too -- I rigged up a very simple system to run pyglet windows in a background thread, so I could control the microscope from an interactive python interpreter, while still being able to programmatically interact with pyglet window objects. (Happy to share this code with anyone who desires. It's much cleaner, IMO, than the gyrations that ipython has to go through to support nonblocking QT, Tk, etc. windows. This is becase the pyglet mainloop is in python, and is easy to subclass and otherwise mess with.)
The downside is of course that OpenGL isn't a plotting library. The upside is that if you have a well-defined plotting task, and you want full aesthetic control and also high speed, you can get that with not too much work.
Just a thought, Zach
Hey Zach, I've been working on an early version of an OpenGL/pyglet-based backend for Chaco. It currently does most of the plots that are supported in Chaco (although there are issues with the color bar rendering incorrectly). I use pyglet to get a window and provide an platform independent API for events, but most of the actual drawing is done via a C++ GraphicsContext class that makes calls to libOpenGl. (I use pyglet to render text and Andrew Straw's pygarrayimage to draw images.) This GraphicsContext has a transform stack, a clip stack, supports compiled paths, etc. I also have my own little "PygletSimpleApp" class analog of WxSimpleApp and whatnot. It is indeed very nice to have total control over the event loop - so much simpler than fiddling with the Wx event queue! I've tested my code on win32, Ubuntu 7, and OS X. The beauty of doing it this way is that I can reuse all of the data handling and rendering code from Chaco, and on systems where I have WX or Qt available, I can switch to using those instead of Pyglet by setting a single environment variable. I'm hoping to get this GL backend polished up enough to release it as a supported part of Chaco, maybe by the next large-ish release (3.1? 3.2?). -Peter