我正在使用Python 3.6.1。 我需要获取用Tkinter askcolor方法选择的颜色的RGB值的字符串(或int值)。 我的代码:
from tkinter.colorchooser import askcolor
color = askcolor()
rgb_tuple = color[0] #gets tuple of RGB values
color_result_rgb = ' '.join(format(x, "1.0f") for x in rgb_tuple) #tuple into a string
现在,假设我选择带有值(255,0,128)的粉红色
>>> rgb_tuple
返回:
(255.99609375, 0.0, 128.5)
和
>>> color_result_rgb
返回:
'256 0 128'
如何解决此问题,以便返回的值正确?
答案 0 :(得分:4)
这似乎是tkinter 1 中的错误。 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)
我已提交错误报告:askcolor is returning floats for r,g,b values instead of ints
答案 1 :(得分:0)
我想从颜色选择器对话框中获取颜色以传递给create_line方法。 askcolor函数/方法返回((255.99609375,0.0,0.0),'#ff0000')。这是我需要的后一个值,所以这两行对我来说很成功...
rgb, color = askcolor()
canvas.create_line((lastx, lasty, event.x, event.y), fill=color)