如何使Canvas小部件颜色与原始颜色相比更暗?

时间:2018-10-22 15:14:57

标签: python-3.x tkinter colors widget tkinter-canvas

我有一个带有绿色矩形的画布小部件:

|  ID   |   Name   |  Cost   |  Cost2  |   Info1   |   Info2   |  
|-------|----------|---------|---------|-----------|-----------|                                                   
|  1    |   Name1  |   20    |   50    |   text1   |   text1   |                                                   
|  1    |   Name1  |  NULL   |  NULL   |   text1   |   text1   |  
|  1    |   Name1  |  NULL   |  NULL   |   text1   |   text1   |  
|  2    |   Name2  |   30    |   10    |   text21  |   text21  |  
|  2    |   Name2  |  NULL   |  NULL   |   text22  |   text22  |  
|  2    |   Name2  |  NULL   |  NULL   |   text23  |   text23  | 
|  2    |   Name2  |  NULL   |  NULL   |   text24  |   text24  |
|  2    |   Name22 |   30    |   40    |   text21  |   text21  | 
|  2    |   Name22 |  NULL   |  NULL   |   text22  |   text22  | 
|  2    |   Name22 |  NULL   |  NULL   |   text23  |   text23  | 
|  2    |   Name22 |  NULL   |  NULL   |   text24  |   text24  | 

我想使它变暗。所以:

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

问题是,我应该将canvas.itemconfig(1, fill=?????) (又称原始颜色的“较暗”颜色)放在什么位置。

当然,我只能找到一个十六进制的绿色或更深的阴影,但要点是:如何根据原始颜色找到变暗的小部件?

如果出现类似?????之类的颜色,我不一定需要找到较暗的颜色。

1 个答案:

答案 0 :(得分:1)

这是一个简单的示例,说明如何使用函数将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()