Как сделать цвет виджета Canvas более темным по сравнению с исходным цветом? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть этот виджет холста с зеленым прямоугольником:

canvas = tk.Canvas(root)
canvas.create_rectangle(0,0,50,100, fill='green')

Я хочу затемнить его.Итак:

canvas.itemconfig(1, fill=?????)

Вопрос в том, что я должен поместить в ?????, что еще более «темный» цвет исходного цвета.

Конечно, я могу просто найти гекс дляболее темный оттенок зеленого или что-то в этом роде, но дело в том: Как найти затемненный виджет на основе исходного цвета?

Мне не обязательно находитьболее темная версия цвета, если есть что-то вроде: canvas.itemconfig(1, darkness=-100).

1 Ответ

0 голосов
/ 22 октября 2018

Вот простой пример того, как использовать функцию для понижения цвета на основе кортежа RGB, который преобразуется в шестнадцатеричный.Мы начинаем со светло-зеленого, и с каждым нажатием кнопки становится темнее.Это простой пример, но я уверен, что вы можете адаптировать его для своих нужд.

import tkinter as tk

root = tk.Tk()

cv = (110, 160, 50)
canvas = tk.Canvas(root)
rect = canvas.create_rectangle(0,0,50,100, fill="#%02x%02x%02x" % cv)
canvas.pack()

def darker():
    global cv
    greater = True
    cv = (cv[0]- 10, cv[1] - 10, cv[2] - 10)
    for item in cv:
        if item < 0:
            greater = False

    if greater == True:
        canvas.itemconfig(rect, fill = "#%02x%02x%02x" % cv)

tk.Button(root, text="Darker", command=darker).pack()

root.mainloop()

Или вы можете сделать это, используя текущую предпочтительную конкатенацию с format():

import tkinter as tk

root = tk.Tk()

cv = (110, 160, 50)
canvas = tk.Canvas(root)
rect = canvas.create_rectangle(0,0,50,100, fill = "#{}".format("".join("{:02X}".format(a) for a in cv)))
canvas.pack()

def darker():
    global cv
    greater = True
    cv = (cv[0]- 10, cv[1] - 10, cv[2] - 10)
    for item in cv:
        if item < 0:
            greater = False

    if greater == True:
        canvas.itemconfig(rect, fill = "#{}".format("".join("{:02X}".format(a) for a in cv)))

tk.Button(root, text="Darker", command=darker).pack()

root.mainloop()
...