相对颜色变化

Relative colour changing

情况

所以我正在为菜单设计一些按钮,我正在使用功能来简化流程。 当我调用该函数时,我遇到问题的类型有 9 个参数:

def toggleButton(msg, x, y, w, h, c1, c2, toggle, boo):

但是我这里的问题只需要参数 c1 和 c2。 简而言之,它们是按钮在每个二进制状态下的颜色。

函数内部有一个链接变量"colour" 在 c1 和 c2

之间的每个切换状态颜色交换

问题

既然我们有了上下文,我的问题是如何独立于实际的颜色知识来更改 c1 和 c2 的值?

c1 = (r, g, b)

然后我把c1变成:

c1 = (r+10, g+10, b+10)

一开始不必知道 (r, g, b)?

我尝试使用 c1[0],它输出 r 但不允许我更改值。

我用来解决这个问题的测试代码是:

colour = (255, 255, 255)      ##arbitrary colour
print(colour)                 ##print the colour, outputs (255, 255, 255)

print(colour[0])              ## print first number, outputs 255
colour[0] = colour[0] - 50    ## code breaks with error "TypeError: 'tuple' object does not support item assignment"
print(colour)
print(colour[0])

编辑

我已经得到了上述问题的答案,但这是我发现的一个问题,如果结果颜色为:

colour = tuple([c+50 for c in colour])

无效,它会中断(很明显) 我试过了

for c in colour:
        if c > 255:
            colour[c] = tuple(255)

解决这个问题,但它不起作用,所以如果有人能帮助我,这对于防止将来出现错误非常有用,尤其是当我不知道我的代码是什么颜色时会被选择用于最终产品。

您不能从元组中减去整数。如果你想从每个颜色元素中减去 50,你可以使用

colour = tuple([c-50 for c in colour])

如果要为每个值添加增量,并将结果限制在 0 到 255 之间,可以使用

colour = tuple([max(0, min(255, c+delta)) for c in colour])