#!/bin/sh
""":"
exec python $0 ${1+"$@"}
"""
# ---------------------------- HelloGraph.py ----------------------
#
# This program demonstrates all methods available in the graph
# part. Note that this program does not do anything useful;
# its purpose is only to demonstrate functionality.
#
from Tkinter import * # The Tk package
import Pmw # The Python MegaWidget package
import math # import the sin-function
master = Tk() # build Tk-environment
ncurves = 4 # draw 4 curves
npoints = 7 # use 7 points on each curve
vector_x = [] # make vector for x-axis
vector_y = []
# fill data in vectors:
for y in range(ncurves):
vector_y.append([])
for x in range(npoints):
vector_x.append(x*0.1)
# fill vectors with cool graphs
for c in range(ncurves):
vector_y[c].append(math.sin(c*x*0.5))
g = Pmw.Blt.Graph(master)
g.pack(expand=1, fill='both')
color = ['red', '#ff9900', 'blue', '#00cc00', 'black', 'grey']
########################### bar_create ###############################
# note: bars are not fully documented herein, but we add a short example on
# how to use it here. You'll have to read the Tcl manual to
# get the complete documentation for this package.
g.configure(barmode="overlap")
# "overlap" can be replaced by "stacked", "infront", "aligned", "overlap"
for c in range(ncurves):
curvename = 'bar_sin(' + str(c) +'x)'
g.bar_create(curvename,
xdata=tuple(vector_x),
barwidth=0.08,
fg=color[c],
ydata=tuple(vector_y[c]))
############################ line_create #############################
for c in range(ncurves):
curvename = 'sin(' + str(c) +'x)'
g.line_create(curvename,
xdata=tuple(vector_x),
ydata=tuple(vector_y[c]),
color=color[c],
smooth='natural',
linewidth=2,
symbol='')
############################### configure #############################
# The following example shows how to specify options to configure().
g.configure(title='Hello Graph', # enter a title
background='lightblue', # a bgcolor
borderwidth=4, # a thicker border
relief="sunken", # let it be sunken
cursor="arrow") # use arrow rather than crosshair.
################################## extents ############################
def showExtents():
print("extents:")
print "leftmargin: ", g.extents("leftmargin" )
print "rightmargin: ", g.extents("rightmargin" )
print "topmargin: ", g.extents("topmargin" )
print "bottommargin: ", g.extents("bottommargin")
print "plotwidth: ", g.extents("plotwidth" )
print "plotheight: ", g.extents("plotheight" )
################################# transform ############################
def showTransform():
print "screen coordinate (0,0) has axis coordinate: ", g.invtransform(0, 0)
################################# transform ############################
def showInvtransform():
print "axis coordinate (0,0) has screen coordinate: ", g.transform(0, 0)
################################## inside ##############################
def showInside():
print "screen coordinate (100,100) is ",
if g.inside(100, 100):
print "inside ",
else:
print "outside ",
print "the plotarea."
################################### snap ################################
def showSnap():
img = PhotoImage(name="image", master=master)
g.snap(img) # take snapshot
img.write("file.ppm") # and save it to file.
print "Snapshot taken an written to file: file.ppm"
# make row of buttons
buttons = Pmw.ButtonBox(master, labelpos='n', label_text='Options')
buttons.pack(fill='y', expand=1, padx=10, pady=10)
buttons.add('Extents', command=showExtents)
buttons.add('Transform', command=showTransform)
buttons.add('InvTransform', command=showInvtransform)
buttons.add('Inside', command=showInside)
buttons.add('Snap', command=showSnap)
buttons.add('Quit', command=master.quit)
master.mainloop()