我可以在 tkinter 中使用 rgb 吗?

问题描述 投票:0回答:4

我可以在 tkinter 中使用 rbg 代替 hex 吗?如果是这样,我该怎么办? 我计划使用此功能来制作从一种颜色到另一种颜色的渐变,并且我计划创建一个 for 循环以在几秒钟内将其从 1 更改为 255。

from tkinter import *

root = Tk()
root.configure(background="can i use rgb instead of hex here?")
root.mainloop()
python tkinter colors
4个回答
33
投票

不,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}'

注意,Python 标准库中的

colorsys
模块可以帮助翻译
HSV
HLS
YIQ
颜色系统


2
投票
def rgbtohex(r,g,b):
    return f'#{r:02x}{g:02x}{b:02x}'

print(rgbtohex(r=255, g=255, b=255))

希望这对你们有些人有帮助


0
投票

这将产生渐变。

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)))

-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()”代码行,它就会起作用,如上所示。

© www.soinside.com 2019 - 2024. All rights reserved.