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