Python Tkinter askcolor返回错误的RGB值?

Python Tkinter askcolor返回错误的RGB值?,python,tkinter,colors,Python,Tkinter,Colors,我正在使用Python 3.6.1。 我需要得到一个字符串(或int值)的RGB值的颜色选择与Tkinter askcolor方法。 我的代码: 现在,假设我选择一种粉红色,其值为(255,0,128) 返回: (255.99609375, 0.0, 128.5) '256 0 128' 及 返回: (255.99609375, 0.0, 128.5) '256 0 128' 如何修复此问题以使返回的值正确?这似乎是tkinter1中的一个错误askcolor应返回整数。解决方法似乎很简

我正在使用Python 3.6.1。 我需要得到一个字符串(或int值)的RGB值的颜色选择与Tkinter askcolor方法。 我的代码:

现在,假设我选择一种粉红色,其值为(255,0,128)

返回:

(255.99609375, 0.0, 128.5)
'256 0 128'

返回:

(255.99609375, 0.0, 128.5)
'256 0 128'

如何修复此问题以使返回的值正确?

这似乎是tkinter1中的一个错误
askcolor
应返回整数。解决方法似乎很简单:将值转换为整数,然后再转换为字符串:

color_result_rgb = ' '.join(str(int(x)) for x in rgb_tuple) 

1查看tkinter代码,即使底层tcl/tk解释器正在返回int,它确实有意返回一个浮点数。这似乎是python 3.x中
/
操作符行为改变的副作用

这是tkinter代码对原始值所做的操作:

r, g, b = widget.winfo_rgb(result)
return (r/256, g/256, b/256), str(result)

我提交了一个错误报告:

我想从颜色选择器对话框中获取颜色,并将其传递给create\u line方法。askcolor函数/方法返回((255.99609375,0.0,0.0),“#ff0000”)。这是我需要的后一个值,所以这两行为我做了一件事

rgb, color = askcolor()

canvas.create_line((lastx, lasty, event.x, event.y), fill=color)

尝试将值转换为整数,而不是
format()
调用中的浮点;所有文档似乎都同意返回值至少应在
0..255
范围内。它们都没有特别提到可能返回实数(与更规则的整数相反)。你在运行什么操作系统?可能有一些颜色管理干扰吗?这看起来像一个bug-当我在我的linux机器上运行它时,我确实得到了浮点数而不是整数。简单的解决方法是将数字转换为int而不是float。@martineau:这是一个已知的问题,即使用
format()将值
255
转换为float
产生255.99和一位?@usr2564301:据我所知,
255.99609375
有点奇怪,但这里真正的问题是将
askcolor()
的结果转换为浮点格式,而不是整数格式。感谢您解释错误的来源。我觉得没有想到解决办法很傻吗。谢谢@JustynaStępniak:如果这回答了您的问题,您可能需要阅读。
rgb, color = askcolor()

canvas.create_line((lastx, lasty, event.x, event.y), fill=color)