#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 saturationnand intensity') self.radiobuttons.add('Usenbrightness')
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 saturationnand 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() == 'Usenbrightness')
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()
|