|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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): |
|
|
|
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. |
|
""" |
|
|
|
|
|
if not result or not str(result): |
|
return None, None |
|
|
|
|
|
|
|
r, g, b = widget.winfo_rgb(result) |
|
return (r//256, g//256, b//256), str(result) |
|
|
|
|
|
|
|
|
|
|
|
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() |
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
print("color", askcolor()) |
|
|