simple fractals with python and Tkinter

Matthew Wilson mwilson at sarcastic-horse.com
Sun Oct 12 13:57:27 EDT 2003


Wow-  thanks a lot for the improvements.  This feedback is exactly what
I was hoping for when I posted the code.  I'll study them today.


On Sat, 11 Oct 2003 18:46:20 +0200
"Michael Peuser" <mpeuser at web.de> wrote:

> 
> "Matthew Wilson" <mwilson at sarcastic-horse.com>
> 
> > The program is available here:
> >
> > http://www.sarcastic-horse.com/landscape/pts.py
> >
> 
> Hi Matthew,
> 
> Canvas is not very well suited for that kind of visualisation. I often use
> the WCK extension (see below for the changes I made waiting for dinner...)
> 
> I encapsulated your drawing code into a routine tkDraw and wrote a
> corresponding routine (a class in fact) wckDraw. To speed up things I
> included the code for color computation directly. (To generate brushes costs
> some time).
> 
> However a *lot* of time is spend inside pt.crect()!
> Thus an impressive improvement was realized with:
> 
> import psyco
> psyco.full()
> 
> Kindly
> MichaelP
> 
> -------
> 
>     #make a sorted list of ticks
>     ticklist = udict.keys()
>     ticklist.sort()
> 
>     import Tkinter
>     root = Tkinter.Tk()
>     root.title('pts')
>     # eithet tkDraw or wckDraw
>     wckDraw(root, ptlist, canvaswidth,
> canvaswidth,hmin,hmax,ticklist,numticks)
>     Tkinter.mainloop()
> 
> # old code
> def tkDraw(root, ptlist,width,height,hmin,hmax,ticklist,numticks):
> 
>     cc = Tkinter.Canvas(root, width=width, height=height, bg="white")
>     for pt in ptlist:
>         color = pt.calc_color(hmin, hmax)
>         rect = pt.crect(ticklist, numticks, width)
>         cc.create_rectangle(rect, fill=color, outline="")
> 
>     cc.pack()
> 
> #new code
> from WCK import Widget
> class wckDraw(Widget):
>     def __init__(self, root,ptlist, width,
> height,hmin,hmax,ticklist,numticks):
> 
>         self.width=width
>         self.height=height
>         self.ptlist=ptlist
>         self.ui_init(root)
>         self.pack()
>         colors={}
>         for pt in ptlist:
>             if pt.h<=0:
>                 col = int(pt.h/hmin*255) # rgb
>             else:
>                 col = int(pt.h/hmax*255)*256*256+100*256+100 #rgb
>             if col not in colors:
>                 colors[col] = self.ui_brush(col)
>             pt.brush = colors[col]
>             pt.rect = pt.crect(ticklist, numticks, width)
>         print "brushes:", len(colors)
>     def ui_handle_config(self):
>         print "resize"
>         return (self.width,self.height)
> 
>     def ui_handle_clear(self, draw,x0, y0, x1, y1):
>          pass
> 
>     def ui_handle_repair(self, draw, x0, y0, x1, y1):
>         for pt in self.ptlist:
>             draw.rectangle(pt.rect,pt.brush)
> 
> 
> 
> 
> -- 
> http://mail.python.org/mailman/listinfo/python-list





More information about the Python-list mailing list