@omz I'm happy with that. I guessed as much when so few people responded. I was already looking for other examples. The ability to save to an image file would be useful.
I figured you would want to know about it. If it doesn't work you should probably either fix it or delete it. I'm not invested and am already switching. As an interim step you could take it out of the documentation or mark it officially deprecated and unsupported. That would have saved me time. I haven.t done much testing but I don't think canvas works at all in Python 2.7. I suspect that it actually works at some level (there are no error messages) but that you can't see it because there is a problem displaying the canvas layer. Simple canvas tests work in 3.5 but there is the text problem @JonB found.
I just want to look at some very simple geometry. Right now I want to look at some polygons my software generates. Looking at the drawing is the point. Think of it as a viewer displaying artwork. Drop shadows and the like would degrade the "view the artwork" experience. In the bad old days of DOS I would just write pixels directly into the frame buffer. I spend months drawing Mandelbrot sets and other fractals one pixel at a time, not even vectors, directly into VGA memory. When I needed vectors I invented the Bresenham without realizing it needed inventing. Before that I wrote a graphics package on an embedded platform driving a fancy spectrometer. The package drove a stepper motor driven plotter. Again I had direct control of pixels. There was no OS to get in the way.
Windows is great with sophisticated multi-threaded multimedia type stuff but the overhead to write a program to just display a simple drawing is staggering. I miss having access to the graphic card frame buffer. Fortunately in python you solve that for me. ;-) I just need to extract the minimal functionality I need from the massive documentation and then figure out how to get it on the display in all my different platforms.
I really should try to do it in as portable way as I can to ease my multi platform problem. That probably means doing the core work in pillow images (ui is obviously custom) with a simple platform specific wrapper to display the result. On Windows and Mac I'm currently using Processing in python mode which is its own custom world. It has its own non standard graphics environment and probably doesn't support pillow. Processing will never be standard python so I'll probably move my desktop apps away from Processing to direct Python scripts that use Tk or Qt for portability but stick with pillow for the portable core.