Initial revision
diff --git a/Tools/pynche/PyncheWidget.py b/Tools/pynche/PyncheWidget.py
new file mode 100644
index 0000000..d40a6ed
--- /dev/null
+++ b/Tools/pynche/PyncheWidget.py
@@ -0,0 +1,51 @@
+"""Main Pynche (Pythonically Natural Color and Hue Editor) widget.
+"""
+
+from Tkinter import *
+import Pmw
+import ColorDB
+from ChipWidget import ChipWidget
+
+class PyncheWidget(Pmw.MegaWidget):
+    def __init__(self, colordb, parent=None, **kw):
+	self.__colordb = colordb
+
+	optionsdefs = (('color', 'grey50', self.__set_color),)
+	self.defineoptions(kw, optionsdefs)
+
+	# initialize base class -- after defining options
+	Pmw.MegaWidget.__init__(self, parent)
+	interiorarg = (self.interior(),)
+
+	# create color selectors
+	self.__selectors = Pmw.Group(parent, tag_text='Color Selectors')
+	self.__selectors.pack(side=TOP, expand=YES, fill=BOTH)
+
+	# create chip window
+	group = Pmw.Group(parent, tag_text='Current Color')
+	group.pack(side=LEFT, fill=Y)
+	self.__selected = ChipWidget(group.interior(),
+				     label_text='Selected')
+	self.__selected.grid()
+	self.__nearest = ChipWidget(group.interior(),
+				    label_text='Nearest')
+	self.__nearest.grid(row=0, column=1)
+
+	# create the options window
+	options = Pmw.Group(parent, tag_text='Options')
+	options.pack(expand=YES, fill=BOTH)
+
+	# Check keywords and initialize options
+	self.initialiseoptions(PyncheWidget)
+
+
+    def __set_color(self):
+	color = self['color']
+	try:
+	    red, green, blue, rrggbb = self.__colordb.find_byname(color)
+	except ColorDB.BadColor:
+	    red, green, blue = ColorDB.rrggbb_to_triplet(color)
+	    
+	nearest = self.__colordb.nearest(red, green, blue)
+	self.__selected.configure(color=color)
+	self.__nearest.configure(color=nearest)