colorchooser.py (2660B)
- # tk common color chooser dialogue
- #
- # 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
- #
- from tkinter.commondialog import Dialog
- __all__ = ["Chooser", "askcolor"]
- class Chooser(Dialog):
- """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.
- """
- command = "tk_chooseColor"
- def _fixoptions(self):
- """Ensure initialcolor is a tk color string.
- Convert initialcolor from a RGB triplet to a color string.
- """
- try:
- color = self.options["initialcolor"]
- if isinstance(color, tuple):
- # Assume an RGB triplet.
- self.options["initialcolor"] = "#%02x%02x%02x" % color
- except KeyError:
- pass
- def _fixresult(self, widget, result):
- """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.
- if not result or not str(result):
- return None, None # canceled
- # To simplify application code, the color chooser returns
- # an RGB tuple together with the Tk color string.
- r, g, b = widget.winfo_rgb(result)
- return (r//256, g//256, b//256), str(result)
- #
- # convenience stuff
- 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.
- """
- if color:
- options = options.copy()
- options["initialcolor"] = color
- return Chooser(**options).show()
- # --------------------------------------------------------------------
- # test stuff
- if __name__ == "__main__":
- print("color", askcolor())