| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # 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
- #
- #
- # options (all have default values):
- #
- # - initialcolor: color to mark as selected when dialog is displayed
- # (given as an RGB triplet or a Tk color string)
- #
- # - parent: which window to place the dialog on top of
- #
- # - title: dialog title
- #
- from tkinter.commondialog import Dialog
- #
- # 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"]
- if isinstance(color, tuple):
- # assume an RGB triplet
- self.options["initialcolor"] = "#%02x%02x%02x" % color
- except KeyError:
- pass
- def _fixresult(self, widget, result):
- # 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
- # 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):
- "Ask for a color"
- if color:
- options = options.copy()
- options["initialcolor"] = color
- return Chooser(**options).show()
- # --------------------------------------------------------------------
- # test stuff
- if __name__ == "__main__":
- print("color", askcolor())
|