Color spectrum demonstration : Pmw Color « GUI Pmw « Python






Color spectrum demonstration

Color spectrum demonstration
#Pmw copyright

#Copyright 1997-1999 Telstra Corporation Limited, Australia 
#Copyright 2000-2002 Really Good Software Pty Ltd, Australia

#Permission is hereby granted, free of charge, to any person obtaining a copy 
#of this software and associated documentation files (the "Software"), to deal 
#in the Software without restriction, including without limitation the rights 
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
#copies of the Software, and to permit persons to whom the Software is furnished 
#to do so, subject to the following conditions:

#The above copyright notice and this permission notice shall be included in all 
#copies or substantial portions of the Software.

#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
#INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
#PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
#HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
#OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
#SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 





title = 'Color spectrum demonstration'

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

import string
import Tkinter
import Pmw

class Demo:
    def __init__(self, parent):
  parent = Tkinter.Frame(parent)
  parent.pack(padx=10, pady=10, fill='both', expand=1)
  self.width = 350
  self.height = 250
  self.canvas = Tkinter.Canvas(parent,
    width = self.width, height = self.height)
  self.canvas.grid(row = 0, column = 0, columnspan = 2, sticky = 'news')

  self.numColors = Pmw.EntryField(parent,
    labelpos = 'w',
    label_text = 'Number of colors:',
    entry_width = 5,
    validate = 'numeric',
    command = Pmw.busycallback(self.execute))
  self.numColors.grid(row = 1, column = 0, sticky = 'ew')

  self.correction = Pmw.EntryField(parent,
    labelpos = 'w',
    label_text = 'Correction:',
    validate = 'real',
    entry_width = 5,
    command = Pmw.busycallback(self.execute))
  self.correction.grid(row = 1, column = 1, sticky = 'ew')

  self.saturation = Pmw.EntryField(parent,
    labelpos = 'w',
    label_text = 'Saturation:',
    validate = 'real',
    entry_width = 5,
    command = Pmw.busycallback(self.execute))
  self.saturation.grid(row = 2, column = 0, sticky = 'ew')

  self.intensity = Pmw.EntryField(parent,
    labelpos = 'w',
    label_text = 'Intensity:',
    validate = 'real',
    entry_width = 5,
    command = Pmw.busycallback(self.execute))
  self.intensity.grid(row = 2, column = 1, sticky = 'ew')

  self.extraOrange = Pmw.EntryField(parent,
    labelpos = 'w',
    label_text = 'Emphasize orange (0 or 1):',
    validate = {'validator' : 'numeric', 'min' : 0, 'max' : 1},
    entry_width = 5,
    command = Pmw.busycallback(self.execute))
  self.extraOrange.grid(row = 3, column = 0, sticky = 'ew')

  self.text = Pmw.EntryField(parent,
    labelpos = 'w',
    label_text = 'Text:',
    entry_width = 20,
    command = Pmw.busycallback(self.execute))
  self.text.grid(row = 4, column = 0, sticky = 'ew')

  self.brightness = Pmw.EntryField(parent,
    labelpos = 'w',
    label_text = 'Brightness:',
    validate = 'real',
    entry_width = 5,
    command = Pmw.busycallback(self.execute))
  self.brightness.grid(row = 3, column = 1, sticky = 'ew')

  self.radiobuttons = Pmw.RadioSelect(parent,
    command = Pmw.busycallback(self.radio_cb),
  )
        self.radiobuttons.grid(row = 4, column = 1)
        self.radiobuttons.add('Use saturation\nand intensity')
        self.radiobuttons.add('Use\nbrightness')

  parent.grid_columnconfigure(0, weight = 1)
  parent.grid_columnconfigure(1, weight = 1)
  parent.grid_rowconfigure(0, weight = 1)

  Pmw.alignlabels((self.numColors, self.saturation, self.extraOrange))
  Pmw.alignlabels((self.correction, self.intensity, self.brightness))

  # Set initial values for all entries.
  self.numColors.setentry('64')
  self.correction.setentry('1.0')
  self.saturation.setentry('1.0')
  self.intensity.setentry('1.0')
  self.extraOrange.setentry('1')
  self.brightness.setentry('0.7')
  self.text.setentry('This is a test')
  self.radiobuttons.invoke('Use saturation\nand intensity')

  self.execute()

    def radio_cb(self, value):
  self.execute()

    def execute(self):
  try:
      numColors = string.atoi(self.numColors.get())
      correction = string.atof(self.correction.get())
      saturation = string.atof(self.saturation.get())
      intensity = string.atof(self.intensity.get())
      extraOrange = string.atof(self.extraOrange.get())
      brightness = string.atof(self.brightness.get())
  except ValueError:
      self.numColors.bell()
      return

  if numColors <= 0:
      self.numColors.bell()
      return

        self.canvas.delete('all')

  colorList = Pmw.Color.spectrum(
    numColors, correction, saturation, intensity, extraOrange)
  extent = 360.0 / numColors

        useBrightness = \
                (self.radiobuttons.getcurselection() == 'Use\nbrightness')

  if numColors == 1:
      # Special case circle, since create_arc does not work when
      # extent is 360.
      background = colorList[0]
            if useBrightness:
                background = Pmw.Color.changebrightness(
                        self.canvas, background, brightness)
      self.canvas.create_oval(10, 10, self.width - 10, self.height - 10,
    fill = background, outline = background)

  for index in range(numColors):
      start = index * extent - extent / 2
      background = colorList[index]
            if useBrightness:
                background = Pmw.Color.changebrightness(
                        self.canvas, background, brightness)
      self.canvas.create_arc(10, 10, self.width - 10, self.height - 10,
    start = start, extent = extent,
    fill = background, outline = background)

        text = self.text.get()
        self.canvas.create_text(self.width / 2, self.height / 3, text = text)
        self.canvas.create_text(self.width / 2, self.height / 2, text = text)
        self.canvas.create_text(self.width / 2, 2 * self.height / 3, text = text)

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

# 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()

           
       








Related examples in the same category

1.Pmw Color scheme demonstrationPmw Color scheme demonstration