我知道在tkinter中不可能使用透明度或HSL颜色表示。但我的问题是,是否可以连续地从任何颜色(黑色除外)变为白色,而不使用任何其他颜色,只选择颜色的阴影和色调。例如,我需要让我的矩形在1分钟内从棕色连续变成白色。我只有一个int / float值,我可以根据它改变颜色。有什么想法吗?
答案 0 :(得分:2)
是的,这是可能的。你想要的只是在棕色和白色之间创建一个渐变。但是,不是绘制整个渐变,而是希望一次显示一种颜色几毫秒。
以下代码改编自此答案:https://stackoverflow.com/a/11893324/7432。
注意:出于演示目的,我会在6秒而不是60秒的时间内进行颜色更改,因此您不必等待完整效果。
import Tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.rect = tk.Frame(width=200, height=200)
self.rect.pack(fill="both", expand=True, padx=20, pady=20)
# compute a list of colors that form a gradient between
# a starting and ending color, then slowly adjust the background
# of the rectangle according to the computed colors
self.colors = self._compute_colors("brown", "white", 60)
self._adjust_colors()
def _adjust_colors(self):
color = self.colors.pop(0)
self.rect.configure(background=color)
if len(self.colors) > 0:
self.after(100, self._adjust_colors)
def _compute_colors(self, start, end, limit):
(r1,g1,b1) = self.winfo_rgb(start)
(r2,g2,b2) = self.winfo_rgb(end)
r_ratio = float(r2-r1) / limit
g_ratio = float(g2-g1) / limit
b_ratio = float(b2-b1) / limit
colors = []
for i in range(limit):
nr = int(r1 + (r_ratio * i))
ng = int(g1 + (g_ratio * i))
nb = int(b1 + (b_ratio * i))
color = "#%4.4x%4.4x%4.4x" % (nr,ng,nb)
colors.append(color)
return colors
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True);
root.mainloop()