2014-10-09 19:44:26 -03:00
|
|
|
# tk common color chooser dialogue
|
2008-05-20 03:58:21 -03:00
|
|
|
#
|
|
|
|
# this module provides an interface to the native color dialogue
|
|
|
|
# available in Tk 4.2 and newer.
|
|
|
|
#
|
|
|
|
# written by Fredrik Lundh, May 1997
|
|
|
|
#
|
|
|
|
# fixed initialcolor handling in August 1998
|
|
|
|
#
|
|
|
|
|
|
|
|
#
|
|
|
|
# options (all have default values):
|
|
|
|
#
|
2014-10-09 19:44:26 -03:00
|
|
|
# - initialcolor: color to mark as selected when dialog is displayed
|
2008-05-20 03:58:21 -03:00
|
|
|
# (given as an RGB triplet or a Tk color string)
|
|
|
|
#
|
|
|
|
# - parent: which window to place the dialog on top of
|
|
|
|
#
|
|
|
|
# - title: dialog title
|
|
|
|
#
|
|
|
|
|
2008-05-20 04:13:37 -03:00
|
|
|
from tkCommonDialog import Dialog
|
2008-05-20 03:58:21 -03:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# color chooser class
|
|
|
|
|
|
|
|
class Chooser(Dialog):
|
|
|
|
"Ask for a color"
|
|
|
|
|
|
|
|
command = "tk_chooseColor"
|
|
|
|
|
|
|
|
def _fixoptions(self):
|
|
|
|
try:
|
|
|
|
# make sure initialcolor is a tk color string
|
|
|
|
color = self.options["initialcolor"]
|
2008-12-29 12:22:25 -04:00
|
|
|
if isinstance(color, tuple):
|
2008-05-20 03:58:21 -03:00
|
|
|
# assume an RGB triplet
|
|
|
|
self.options["initialcolor"] = "#%02x%02x%02x" % color
|
|
|
|
except KeyError:
|
|
|
|
pass
|
|
|
|
|
|
|
|
def _fixresult(self, widget, result):
|
2008-12-29 12:22:25 -04:00
|
|
|
# result can be somethings: an empty tuple, an empty string or
|
|
|
|
# a Tcl_Obj, so this somewhat weird check handles that
|
|
|
|
if not result or not str(result):
|
|
|
|
return None, None # canceled
|
|
|
|
|
2008-05-20 03:58:21 -03:00
|
|
|
# to simplify application code, the color chooser returns
|
|
|
|
# an RGB tuple together with the Tk color string
|
|
|
|
r, g, b = widget.winfo_rgb(result)
|
2008-12-29 12:22:25 -04:00
|
|
|
return (r/256, g/256, b/256), str(result)
|
2008-05-20 03:58:21 -03:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# convenience stuff
|
|
|
|
|
|
|
|
def askcolor(color = None, **options):
|
|
|
|
"Ask for a color"
|
|
|
|
|
|
|
|
if color:
|
|
|
|
options = options.copy()
|
|
|
|
options["initialcolor"] = color
|
|
|
|
|
|
|
|
return Chooser(**options).show()
|
|
|
|
|
|
|
|
|
|
|
|
# --------------------------------------------------------------------
|
|
|
|
# test stuff
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
print "color", askcolor()
|