我可以在 tkinter 中使用 rbg 代替 hex 吗?如果是这样,我该怎么办? 我计划使用此功能来制作从一种颜色到另一种颜色的渐变,并且我计划创建一个 for 循环以在几秒钟内将其从 1 更改为 255。
from tkinter import *
root = Tk()
root.configure(background="can i use rgb instead of hex here?")
root.mainloop()
不,tkinter 不支持 RGB,但您可以编写一个小辅助函数来解决这个问题:
也许是这样的,其中参数
rgb
必须是表示为整数元组的有效 rgb 代码。
import tkinter as tk
def _from_rgb(rgb):
"""translates an rgb tuple of int to a tkinter friendly color code
"""
return "#%02x%02x%02x" % rgb
root = tk.Tk()
root.configure(bg=_from_rgb((0, 10, 255)))
root.mainloop()
如果您发现它更具可读性,您还可以使用
fstrings
来达到完全相同的结果:
def _from_rgb(rgb):
"""translates an rgb tuple of int to a tkinter friendly color code
"""
r, g, b = rgb
return f'#{r:02x}{g:02x}{b:02x}'
colorsys
模块可以帮助翻译 HSV
、HLS
和 YIQ
颜色系统
def rgbtohex(r,g,b):
return f'#{r:02x}{g:02x}{b:02x}'
print(rgbtohex(r=255, g=255, b=255))
希望这对你们有些人有帮助
这将产生渐变。
from tkinter import *
root=Tk()
root.title("colors")
cv=Canvas(root, width=20, height=255)
cv.pack()
def _from_rgb(rgb):
"""translates an rgb tuple of int to a tkinter friendly color code
"""
return "#%02x%02x%02x" % rgb
for canvas in range(255):
cv.create_line(0,canvas, 20,canvas, fill=_from_rgb((canvas, canvas,
canvas)))
你可以从中获得乐趣。 您可以尝试以下方法:
from tkinter import *
def dec2hex(r,g,b):
return f'#{r:02x}{g:02x}{b:02x}'
root=Tk()
cv=Canvas(highlightthickness=0)
cv.pack(expand=True, fill=BOTH)
for color in range(510):
cv.create_line(0,color, 3000,color, fill=dec2hex(0, round((510-color)/2), round(color/2)))
for color in range(510):
cv.create_line(0,(color+510), 3000,(color+510), fill=dec2hex(round(color/2), 0, round((510-color)/2)))
from tkinter import *
import random
import time
window = Tk()
window.title("Random colours")
colours = ["black",
"cyan",
"magenta",
"red",
"blue",
"gray"
]
bgColour = window.configure(background = random.choice(colours))
window.update()
time.sleep(1)
bgColour1 = window.configure(background = random.choice(colours))
window.mainloop()
享受这个乐趣,您可以发挥创意并做一些事情,例如将其变成永远变化的背景颜色,或制作序列。 Tkinter 上有很多不同的颜色可供您使用,因此如果您确实需要,可以每隔几秒手动更改每种颜色。我之前忘记提到的另一件事是,您不能像迈克所说的那样使用 time.sleep() 选项,但如果您使用“.update()”代码行,它就会起作用,如上所示。