2014-10-09 19:44:32 -03:00
|
|
|
# tk common color chooser dialogue
|
1997-07-19 17:02:36 -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
|
|
|
|
#
|
1998-08-07 11:55:21 -03:00
|
|
|
# fixed initialcolor handling in August 1998
|
|
|
|
#
|
1997-07-19 17:02:36 -03:00
|
|
|
|
|
|
|
#
|
|
|
|
# options (all have default values):
|
|
|
|
#
|
2014-10-09 19:44:32 -03:00
|
|
|
# - initialcolor: color to mark as selected when dialog is displayed
|
1997-07-19 17:02:36 -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-17 15:39:55 -03:00
|
|
|
from tkinter.commondialog import Dialog
|
1997-07-19 17:02:36 -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:27:13 -04:00
|
|
|
if isinstance(color, tuple):
|
1997-07-19 17:02:36 -03:00
|
|
|
# assume an RGB triplet
|
1998-08-07 11:55:21 -03:00
|
|
|
self.options["initialcolor"] = "#%02x%02x%02x" % color
|
1997-07-19 17:02:36 -03:00
|
|
|
except KeyError:
|
|
|
|
pass
|
|
|
|
|
|
|
|
def _fixresult(self, widget, result):
|
2008-12-29 12:27:13 -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
|
|
|
|
|
1997-07-19 17:02:36 -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:27:13 -04:00
|
|
|
return (r/256, g/256, b/256), str(result)
|
1997-07-19 17:02:36 -03:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# convenience stuff
|
|
|
|
|
|
|
|
def askcolor(color = None, **options):
|
|
|
|
"Ask for a color"
|
|
|
|
|
1998-08-07 11:55:21 -03:00
|
|
|
if color:
|
1998-08-10 17:13:17 -03:00
|
|
|
options = options.copy()
|
|
|
|
options["initialcolor"] = color
|
1998-08-07 11:55:21 -03:00
|
|
|
|
2003-04-06 06:01:11 -03:00
|
|
|
return Chooser(**options).show()
|
1997-07-19 17:02:36 -03:00
|
|
|
|
|
|
|
|
|
|
|
# --------------------------------------------------------------------
|
|
|
|
# test stuff
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2007-02-09 01:37:30 -04:00
|
|
|
print("color", askcolor())
|