My head is spinning. :-) Especially as I am contemplating backend issues for PataPata / PySqueak.
Some more things I've come across building on your search: The obvious in retrospect: http://www.python.org/doc/faq/gui.html Python Graphic User Interface FAQ === a wx issue and plug for Cairo http://wiki.osafoundation.org/pub/Journal/PhilippeBossutNotes/TheFrameworkIssue.htm "Chandler is developed in Python and uses wxPython/wxWidgets as its crossplatform UI framework. The decision to use wxWidgets has been made early in the project and needs to be reevaluated against progress in competing frameworks. The goal of this document is to continue observing advances in other frameworks as well as learn from what we had to go through in developing with wxWidgets for Chandler." Related to: http://lists.freedesktop.org/archives/cairo/2005-July/004549.html "I've been trying to figure out if there is a way of using Cairo with wxPython. I've found some old conversations (over a year old) on this list but I'm curious if anyone can point me to some actual bindings or instructions? We're struggling with the wx graphics primitives on the Chandler and Cairo looks like a answer to our prayers..." And: http://matplotlib.sourceforge.net/faq.html#WHICHBACKEND ====== At length: "Which backend should I use? Each of the backends offers different strengths. I'll summarize some of them. Image generation For pure image generation (no GUI) you can choose from the Agg, Cairo, PS, SVG, Paint, GD or EMF backends. At this point, I advise people to use the agg backend because: * it's the fastest * it uses freetype2 (as does GD) which renders nicely even at small resolutions * there are clipping issues with GD and Paint * it supports fast antialiased drawing and alpha blending * it supports mathtext * it supports images with imshow It is likely that with time many of these limitiations or problems will be fixed on the other backends. For publication submission or use with TeX, however, the postscript backend is naturally a good choice. GUI Currently there are several choices for GUIs: GTK, GTKAgg, GTKCairo, WX, WXAgg, TkAgg and FltkAgg, with different advantages. * Speed: TkAgg and GTKAgg are likely to be the fastest since most of Agg is renderered in C extension code * Stability: GTK was the first backend and thus has been most thoroughly vetted for bugs. The GTKAgg and GTKCairo backends reuse the GTK widget code, so should likewise be quite stable * Interactivity: All of the GUI backends can be used interactively from a python shell (see interactive) but TkAgg is the hands-down winner here since it can be use from any python shell whereas the GTK and Wx backends require a GUI specific shell * Pretty widgets: If you want to embed matplotlib in an application and pretty GUIs are important to you, Wx, GTK, GTKAgg or GTKCairo are probably your best best. Tk widgets are not visually stunning." ========== My brain hurts! Actually, I've always just wanted to use TK (because it comes with Python), but I have never been able to figure out how to blit arbitrary bitmaps to a TK canvas (though last I tried was years ago). By the way, also jumping from your links, I came across the Enthought "traits" package: http://code.enthought.com/traits/ which is something like what I added to PataPata for properties to wrap wx widgets. They came at it also from wrapping GUI widgets originally it looks like. But I'm not sure their framework is extensible to prototypes the way I want to use them. So, anyway, funny how some of these deeper language issues come up with looking at various graphics libraries. And it clearly shows that the "property" concept in Python could benefit from some more generalization. I added things like side-effects (and plan to add something I might term dependency paths); they added things like validation (a good point, as they said otherwise graphics errors tend to occur far in the code from where values are set). We both want to add Smalltalk-like "changed" or "notify" events. They have a nice general purpose solution, though it is class-oriented, not Prototype oriented. Hopefully Python3K might address improving properties? It seems to me that if one wants ot make graphcis easy to use, havign a consistent way to address graphical objects using soem form of properties might be very important. Certainly VB and Delphi have had great success wrapping arbitrary components with properties (and I think this might apply whether or not the user could interact with them). Just a thought: rather than a new GUI implementation, improving the Python GUI FAQ with lots of this information and pros and cons and so on might be a very valuable effort just by itself. So much of choices depends on specifics and tiny details. For example, I'm fairly happy with wx, but there is this bug with dragging certain widgets under GTK 2.6. And of course, I also want platform independent fonts (and I'm not sure how to get those best, wx uses sizers to get platform independent dialog looks, but the sizes may still vary across platforms). Maybe this 2D, 3D, and Python GUI efforts needs a web site or blog or something? Some place where the nitty gritty details gets hashed out? Might be one already? Kind of like this one for programming languages? http://lambda-the-ultimate.org/ But specific to Python and graphics and user interaction? http://www.google.com/search?hl=en&q=python+graphics Might be something to think about if it does not already exist. --Paul Fernhout Dethe Elza wrote: > On 5/28/06, Paul D. Fernhout <[EMAIL PROTECTED]> wrote: > >> If you haven't already, you could check out: > > > Also: > > PIL.ImageDraw > http://www.esrf.fr/computing/bliss/python2/pil/PIL.ImageDraw.html > http://www.pythonware.com/library/pil/handbook/imagedraw.htm > "The ImageDraw module provide simple 2D graphics for Image > objects. You can use this module to create new images, annotate or > retouch existing images, and to generate graphics on the fly for web > use." > > Aggdraw > http://effbot.org/zone/draw-agg.htm > "The aggdraw module implements the basic WCK 2D Drawing Interface > on top of the AGG library. This library provides high-quality drawing, > with anti-aliasing and alpha compositing, while being fully compatible > with the WCK renderer." > > Matplotlib > http://matplotlib.sourceforge.net/ > "matplotlib is a python 2D plotting library which produces > publication quality figures in a variety of hardcopy formats and > interactive environments across platforms. matplotlib can be used in > python scripts, the python and ipython shell (ala matlab or > mathematica), web application servers, and six graphical user > interface toolkits." > > Kiva > http://code.enthought.com/kiva/ > "Kiva is a multi-platform DisplayPDF drawing engine that supports > multiple output backends, including Windows, GTK, and Macintosh native > windowing systems, a variety of raster image formats, PDF, and > Postscript." > > DrawBot/NodeBox (OS X only, but useful as examples of simple 2D systems) > http://drawbot.com/index.html > http://nodebox.net/manual/reference/topics.php > "DrawBot is an powerful, free application for MacOSX that invites > you to write simple Python scripts to generate two-dimensional > graphics. The builtin graphics primitives support rectangles, ovals, > (bezier) paths, polygons, text objects and transparency." > > PyCairo > http://cairographics.org/pycairo > "Cairo is a library for drawing vector graphics. Vector graphics > are interesting because when they appear on screen, they don't lose > clarity when resized or transformed." > > --Dethe > > _______________________________________________ Edu-sig mailing list [email protected] http://mail.python.org/mailman/listinfo/edu-sig
