2014-10-09 22:44:32 +00:00
|
|
|
# tk common color chooser dialogue
|
1997-07-19 20:02:36 +00: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 14:55:21 +00:00
|
|
|
# fixed initialcolor handling in August 1998
|
|
|
|
#
|
1997-07-19 20:02:36 +00:00
|
|
|
|
|
|
|
|
2008-05-17 18:39:55 +00:00
|
|
|
from tkinter.commondialog import Dialog
|
1997-07-19 20:02:36 +00:00
|
|
|
|
2019-07-26 01:30:33 +00:00
|
|
|
__all__ = ["Chooser", "askcolor"]
|
|
|
|
|
1997-07-19 20:02:36 +00:00
|
|
|
|
|
|
|
class Chooser(Dialog):
|
2021-01-25 09:45:30 +00:00
|
|
|
"""Create a dialog for the tk_chooseColor command.
|
|
|
|
|
|
|
|
Args:
|
|
|
|
master: The master widget for this dialog. If not provided,
|
|
|
|
defaults to options['parent'] (if defined).
|
|
|
|
options: Dictionary of options for the tk_chooseColor call.
|
|
|
|
initialcolor: Specifies the selected color when the
|
|
|
|
dialog is first displayed. This can be a tk color
|
|
|
|
string or a 3-tuple of ints in the range (0, 255)
|
|
|
|
for an RGB triplet.
|
|
|
|
parent: The parent window of the color dialog. The
|
|
|
|
color dialog is displayed on top of this.
|
|
|
|
title: A string for the title of the dialog box.
|
|
|
|
"""
|
1997-07-19 20:02:36 +00:00
|
|
|
|
|
|
|
command = "tk_chooseColor"
|
|
|
|
|
|
|
|
def _fixoptions(self):
|
2021-01-25 09:45:30 +00:00
|
|
|
"""Ensure initialcolor is a tk color string.
|
|
|
|
|
|
|
|
Convert initialcolor from a RGB triplet to a color string.
|
|
|
|
"""
|
1997-07-19 20:02:36 +00:00
|
|
|
try:
|
|
|
|
color = self.options["initialcolor"]
|
2008-12-29 16:27:13 +00:00
|
|
|
if isinstance(color, tuple):
|
2021-01-25 09:45:30 +00:00
|
|
|
# Assume an RGB triplet.
|
1998-08-07 14:55:21 +00:00
|
|
|
self.options["initialcolor"] = "#%02x%02x%02x" % color
|
1997-07-19 20:02:36 +00:00
|
|
|
except KeyError:
|
|
|
|
pass
|
|
|
|
|
|
|
|
def _fixresult(self, widget, result):
|
2021-01-25 09:45:30 +00:00
|
|
|
"""Adjust result returned from call to tk_chooseColor.
|
|
|
|
|
|
|
|
Return both an RGB tuple of ints in the range (0, 255) and the
|
|
|
|
tk color string in the form #rrggbb.
|
|
|
|
"""
|
|
|
|
# Result can be many things: an empty tuple, an empty string, or
|
|
|
|
# a _tkinter.Tcl_Obj, so this somewhat weird check handles that.
|
2008-12-29 16:27:13 +00:00
|
|
|
if not result or not str(result):
|
2021-01-25 09:45:30 +00:00
|
|
|
return None, None # canceled
|
2008-12-29 16:27:13 +00:00
|
|
|
|
2021-01-25 09:45:30 +00:00
|
|
|
# To simplify application code, the color chooser returns
|
|
|
|
# an RGB tuple together with the Tk color string.
|
1997-07-19 20:02:36 +00:00
|
|
|
r, g, b = widget.winfo_rgb(result)
|
2021-01-25 09:45:30 +00:00
|
|
|
return (r//256, g//256, b//256), str(result)
|
1997-07-19 20:02:36 +00:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# convenience stuff
|
|
|
|
|
2021-01-25 09:45:30 +00:00
|
|
|
def askcolor(color=None, **options):
|
|
|
|
"""Display dialog window for selection of a color.
|
|
|
|
|
|
|
|
Convenience wrapper for the Chooser class. Displays the color
|
|
|
|
chooser dialog with color as the initial value.
|
|
|
|
"""
|
1997-07-19 20:02:36 +00:00
|
|
|
|
1998-08-07 14:55:21 +00:00
|
|
|
if color:
|
1998-08-10 20:13:17 +00:00
|
|
|
options = options.copy()
|
|
|
|
options["initialcolor"] = color
|
1998-08-07 14:55:21 +00:00
|
|
|
|
2003-04-06 09:01:11 +00:00
|
|
|
return Chooser(**options).show()
|
1997-07-19 20:02:36 +00:00
|
|
|
|
|
|
|
|
|
|
|
# --------------------------------------------------------------------
|
|
|
|
# test stuff
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2007-02-09 05:37:30 +00:00
|
|
|
print("color", askcolor())
|