turtle库colormode(255)下color()方法输入输出不兼容问题问询
Python Turtle库colormode(255)下color()方法的取值与赋值不兼容问题
在Python的turtle库中,当调用colormode(255)将颜色模式设置为0-255的整数RGB范围后,使用整数类型的RGB元组调用color()方法可以正常设置画笔/填充颜色;但调用无参color()获取当前前景色时,返回的却是浮点型的RGB元组。如果直接将这个返回值传入color()方法再次设色,会触发%x format: an integer is required, not float的报错。
核心疑问:为什么color()方法不接受自身返回的颜色值?
查看turtle库的源码后发现,问题出在颜色值的内部转换逻辑——当传入整数RGB元组时,库会将其转为十六进制格式处理,但返回颜色值时却以浮点型返回;而再次传入浮点型元组时,十六进制格式化的步骤无法处理浮点数,因此触发报错。
解决方案
最简单的处理方式是,将color()返回的浮点型RGB元组转换为整数类型后,再传入color()方法。
示例代码
#color_mode_issue.py 11Jul2023, crs """ turtle colormode(255) color((r,g,b)) set with integers but color() returns floats and color(with floats) complains """ from turtle import * colormode(255) rgb = (0,134,255) # 天蓝色(一种色调) print("正在使用color(", rgb, ")设置颜色") color(rgb) # 设置颜色 fg = color()[0] # 获取前景色 print(fg, "是color()返回的颜色值") print("使用color(", fg, ")时出现问题") try: color(fg) # 使用color()返回的值 except Exception as ex: print("oops...", ex) fg_int = tuple([int(x) for x in fg])# 将元组元素转为整数 print("...但color(", fg_int, ")可正常使用") color(fg_int)
输出结果
正在使用color( (0, 134, 255) )设置颜色 (0.0, 134.0, 255.0) 是color()返回的颜色值 使用color( (0.0, 134.0, 255.0) )时出现问题 oops... %x format: an integer is required, not float ...但color( (0, 134, 255) )可正常使用
内容的提问来源于stack exchange,提问作者crs
相关产品推荐
相关产品推荐

