summaryrefslogtreecommitdiff
path: root/Tools/pynche/pyColorChooser.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/pynche/pyColorChooser.py')
-rw-r--r--Tools/pynche/pyColorChooser.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/Tools/pynche/pyColorChooser.py b/Tools/pynche/pyColorChooser.py
new file mode 100644
index 0000000000..f2dc6acad8
--- /dev/null
+++ b/Tools/pynche/pyColorChooser.py
@@ -0,0 +1,87 @@
+"""Color chooser implementing (almost) the tkColorColor interface
+"""
+
+import os
+from PyncheWidget import PyncheWidget
+import Main
+import ColorDB
+
+class Chooser:
+ """Ask for a color"""
+ def __init__(self,
+ master = None,
+ initialcolor = None,
+ databasefile = None,
+ initfile = None,
+ ignore = None):
+ self.__master = master
+ self.__initialcolor = initialcolor
+ self.__databasefile = databasefile
+ self.__initfile = initfile or os.path.expanduser('~/.pynche')
+ self.__ignore = ignore
+ self.__pw = None
+
+ def show(self):
+ if not self.__pw:
+ self.__pw, self.__sb = \
+ Main.build(master = self.__master,
+ initialcolor = self.__initialcolor,
+ initfile = self.__initfile,
+ ignore = self.__ignore)
+ Main.run(self.__pw, self.__sb)
+ rgbtuple = self.__sb.current_rgb()
+ self.__pw.withdraw()
+ # check to see if the cancel button was pushed
+ if self.__sb.canceled_p():
+ return None, None
+ colordb = self.__sb.colordb()
+ # try to return the color name from the database if there is an exact
+ # match, otherwise use the "#rrggbb" spec. TBD: Forget about color
+ # aliases for now, maybe later we should return these too.
+ try:
+ name = colordb.find_byrgb(rgbtuple)[0]
+ except ColorDB.BadColor:
+ name = ColorDB.triplet_to_rrggbb(rgbtuple)
+ return rgbtuple, name
+
+
+
+# convenience stuff
+def askcolor(color = None, **options):
+ """Ask for a color"""
+ return apply(Chooser, (), options).show()
+
+
+
+# test stuff
+if __name__ == '__main__':
+ class Tester:
+ def __init__(self):
+ from Tkinter import *
+ self.__root = tk = Tk()
+ b = Button(tk, text='Choose Color...', command=self.__choose)
+ b.pack()
+ self.__l = Label(tk)
+ self.__l.pack()
+ q = Button(tk, text='Quit', command=self.__quit)
+ q.pack()
+
+ def __choose(self, event=None):
+ rgb, name = askcolor(master=self.__root)
+ if rgb is None:
+ text = 'You hit CANCEL!'
+ else:
+ r, g, b = rgb
+ text = 'You picked %s (%3d/%3d/%3d)' % (name, r, g, b)
+ self.__l.configure(text=text)
+
+ def __quit(self, event=None):
+ self.__root.quit()
+
+ def run(self):
+ self.__root.mainloop()
+ t = Tester()
+ t.run()
+ # simpler
+## print 'color:', askcolor()
+## print 'color:', askcolor()