simple fractals with python and Tkinter

Michael Peuser mpeuser at web.de
Sat Oct 11 12:46:20 EDT 2003


"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)








More information about the Python-list mailing list