BltGraph.py :  » GUI » Pmw » Pmw.1.3.2 » src » Pmw » Pmw_1_3 » demos » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » GUI » Pmw 
Pmw » Pmw.1.3.2 » src » Pmw » Pmw_1_3 » demos » BltGraph.py
title = 'Blt Graph demonstration'

# Import Pmw from this directory tree.
import sys
sys.path[:0] = ['../../..']

import string
import Tkinter
import Pmw

# Simple random number generator.
rand = 12345
def random():
    global rand
    rand = (rand * 125) % 2796203
    return rand

class GraphDemo(Pmw.MegaToplevel):

    def __init__(self, parent=None, **kw):

  # Define the megawidget options.
  optiondefs = (
      ('size',      10,   Pmw.INITOPT),
  )
  self.defineoptions(kw, optiondefs)

  # Initialise the base class (after defining the options).
  Pmw.MegaToplevel.__init__(self, parent)

  # Create the graph.
  self.createWidgets()

  # Check keywords and initialise options.
  self.initialiseoptions()

    def createWidgets(self):
  # Create vectors for use as x and y data points.
  self._numElements = 7
  self._vectorSize = self['size']
  self._vector_x = Pmw.Blt.Vector()
  self._vector_y = []
  for y in range(self._numElements):
      self._vector_y.append(Pmw.Blt.Vector())
  for index in range(self._vectorSize):
      self._vector_x.append(index)
      for y in range(self._numElements):
    self._vector_y[y].append(random() % 100)

  interior = self.interior()

        controlFrame = Tkinter.Frame(interior)
  controlFrame.pack(side = 'bottom', fill = 'x', expand = 0)

        # Create an option menu for the kind of elements to create.
  elementtype = Pmw.OptionMenu(controlFrame,
    labelpos = 'nw',
    label_text = 'Element type',
    items = ['bars', 'lines', 'mixed', 'none'],
    command = self._setelementtype,
    menubutton_width = 8,
  )
  elementtype.pack(side = 'left')

        # Create an option menu for the barmode option.
  barmode = Pmw.OptionMenu(controlFrame,
    labelpos = 'nw',
    label_text = 'Bar mode',
    items = ['normal', 'stacked', 'aligned', 'overlap'],
    command = self._setbarmode,
    menubutton_width = 8,
  )
  barmode.pack(side = 'left')

        # Create an option menu for the smooth option.
  self.smooth = Pmw.OptionMenu(controlFrame,
    labelpos = 'nw',
    label_text = 'Smooth',
    items = ['linear', 'step', 'natural', 'quadratic'],
    command = self._setsmooth,
    menubutton_width = 9,
  )
  self.smooth.pack(side = 'left')

        # Create an option menu to reverse sort the elements.
  sortelements = Pmw.OptionMenu(controlFrame,
    labelpos = 'nw',
    label_text = 'Order',
    items = ['normal', 'reverse'],
    command = self._setsortelements,
    menubutton_width = 8,
  )
  sortelements.pack(side = 'left')

        # Create an option menu for the bufferelements option.
  bufferelements = Pmw.OptionMenu(controlFrame,
    labelpos = 'nw',
    label_text = 'Buffering',
    items = ['buffered', 'unbuffered'],
    command = self._setbufferelements,
    menubutton_width = 10,
  )
  bufferelements.pack(side = 'left')

  # Create a button to add a point to the vector.
  addpoint = Tkinter.Button(controlFrame, text = 'Add point', 
    command = Pmw.busycallback(self._addpoint))
  addpoint.pack(side = 'left', fill = 'x', expand = 0)

  # Create a button to close the window
  close = Tkinter.Button(controlFrame, text = 'Close', 
    command = Pmw.busycallback(self.destroy))
  close.pack(side = 'left', fill = 'x', expand = 0)

  # Create the graph and its elements.
  self._graph = Pmw.Blt.Graph(interior)
  self._graph.pack(expand = 1, fill = 'both')
  self._graph.yaxis_configure(command=self.yaxisCommand)
  elementtype.invoke('mixed')
  bufferelements.invoke('buffered')

    def yaxisCommand(self, graph, value):
        try:
            num = string.atoi(value)
            return '%d      %3d' % (num * 3, num)
        except ValueError:
            num = string.atof(value)
            return '%g      %3g' % (num * 3, num)

    def _setelementtype(self, type):
        elements = self._graph.element_names()
  apply(self._graph.element_delete, elements)

        if type == 'none':
            return

  colorList = Pmw.Color.spectrum(self._numElements)
  for elem in range(self._numElements):
      if elem == 0:
          hue = None
      else:
          hue = (elem + 1.0) / self._numElements * 6.28318
      foreground = colorList[elem]
      background = Pmw.Color.changebrightness(self, foreground, 0.8)
      if type == 'mixed':
          if elem < self._numElements / 2:
        bar = 0
    else:
        bar = 1
      elif type == 'bars':
          bar = 1
      else:
          bar = 0
      if bar:
    self._graph.bar_create(
        'var' + str(elem),
        xdata=self._vector_x,
        ydata=self._vector_y[elem],
        foreground = foreground,
        background = background)
      else:
    self._graph.line_create(
        'var' + str(elem),
        linewidth = 4,
        xdata=self._vector_x,
        ydata=self._vector_y[elem],
                    smooth = self.smooth.getcurselection(),
        color = foreground)

    def _setbarmode(self, tag):
        self._graph.configure(barmode = tag)

    def _setsmooth(self, tag):
  for element in self._graph.element_show():
            if self._graph.element_type(element) == 'line':
                self._graph.element_configure(element, smooth = tag)

    def _setbufferelements(self, tag):
        self._graph.configure(bufferelements = (tag == 'buffered'))

    def _setsortelements(self, tag):
  element_list = list(self._graph.element_show())
        if len(element_list) > 1:
            if (tag == 'normal') == (element_list[-1] != 'var0'):
                element_list.reverse()
                self._graph.element_show(element_list)

    def _addpoint(self):
  self._vector_x.append(self._vectorSize)
  for y in range(self._numElements):
      self._vector_y[y].append(random() % 100)
  self._vectorSize = self._vectorSize + 1

class Demo:
    def __init__(self, parent):
  if not Pmw.Blt.haveblt(parent):
      message = 'Sorry\nThe BLT package has not been\n' + \
        'installed on this system.\n' + \
        'Please install it and try again.'
      w = Tkinter.Label(parent, text = message)
      w.pack(padx = 8, pady = 8)
      return

  message = 'This is a simple demonstration of the\n' + \
    'BLT graph widget.\n' + \
    'Select the number of points to display and\n' + \
    'click on the button to display the graph.'
  w = Tkinter.Label(parent, text = message)
  w.pack(padx = 8, pady = 8)

  # Create combobox to select number of points to display.
  self.combo = Pmw.ComboBox(parent,
    scrolledlist_items = ('10', '25', '50', '100', '300'),
    entryfield_value = '10')
  self.combo.pack(padx = 8, pady = 8)

  # Create button to start blt graph.
  start = Tkinter.Button(parent,
    text = 'Show BLT graph',
          command = Pmw.busycallback(self.showGraphDemo))
  start.pack(padx = 8, pady = 8)

  self.parent = parent

    def showGraphDemo(self):
  size = string.atoi(self.combo.get())
  demo = GraphDemo(self.parent, size = size)
        demo.focus()

######################################################################

# Create demo in root window for testing.
if __name__ == '__main__':
    root = Tkinter.Tk()
    Pmw.initialise(root)
    root.title(title)

    exitButton = Tkinter.Button(root, text = 'Exit', command = root.destroy)
    exitButton.pack(side = 'bottom')
    widget = Demo(root)
    root.mainloop()
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.