#!/bin/sh """:" exec python $0 ${1+"$@"} """ # ---------------------- HelloBlt.py ---------------------- # # This program demonstrates more basic functionality like # making buttons to control showing of symbols, grids etc. # The example also shows how to make animated graphs and # how to plot the graphs more or less smooth. # from Tkinter import * # The Tk package import Pmw # The Python MegaWidget package import math # import the sin-function def animate(): # This function is completely pointless, but demonstrates # that it's easy to update a graph "runtime". for t in range(31): # In 31 steps... for c in range(ncurves): # ...on each curve for x in range(npoints): # on each point... vector_y[c][x] = math.sin(c*x*0.5 +math.pi*t/15) master.after(20) # wait 0.02 second master.update_idletasks() # update screen def symbolsOnOff(): global symbols symbols = not symbols for curvename in g.element_show(): if symbols: g.element_configure(curvename, symbol='diamond') else: g.element_configure(curvename, symbol='') def smooth(): global smoothing if smoothing == 'linear': smoothing='quadratic' elif smoothing == 'quadratic': smoothing='natural' elif smoothing == 'natural': smoothing='step' else: smoothing = 'linear' for curvename in g.element_show(): g.element_configure(curvename, smooth=smoothing) master = Tk() # build Tk-environment ncurves = 4 # draw 4 curves npoints = 7 # use 8 points on each curve smoothing='linear' symbols = 0 # In this example we use Pmw.Blt.Vectors. These can mostly be used like # a normal list, but changes will be updated in the graph automatically. # Using Pmw.Blt.Vectors is often slower, but in this case very convenient. vector_x = Pmw.Blt.Vector() vector_y = [] for y in range(ncurves): vector_y.append(Pmw.Blt.Vector()) # make vector for y-axis for x in range(npoints): # for each point... vector_x.append(x*0.1) # make an x-value # fill vectors with cool graphs for c in range(ncurves): # for each curve... vector_y[c].append(math.sin(c*x*0.5)) # make an y-value g = Pmw.Blt.Graph(master) # make a new graph area g.pack(expand=1, fill='both') color = ['red', '#ff9900', 'blue', '#00cc00', 'black', 'grey'] for c in range(ncurves): # for each curve... curvename = 'sin(' + str(c) +'x)' # make a curvename g.line_create(curvename, # and create the graph xdata=vector_x, # with x data, ydata=vector_y[c], # and y data color=color[c], # and a color dashes=0, # and no dashed line linewidth=2, # and 2 pixels wide symbol='') # ...and no disks g.configure(title='Hello BLT World') # enter a title # make s row of buttons buttons = Pmw.ButtonBox(master, labelpos='n', label_text='Options') buttons.pack(fill='both', expand=1, padx=10, pady=10) buttons.add('Grid', command=g.grid_toggle) buttons.add('Symbols', command=symbolsOnOff) buttons.add('Smooth', command=smooth) buttons.add('Animate', command=animate) buttons.add('Quit', command=master.quit) master.mainloop() # ...and wait for input