#!/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