Mega Code Archive

 
Categories / Python / GUI Pmw
 

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