【问题标题】:Tkinter askcolor returning wrong RGB values?Tkinter askcolor 返回错误的 RGB 值?
【发布时间】:2018-04-16 21:15:25
【问题描述】:

我正在使用 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'

如何解决这个问题,以使返回的值正确?

【问题讨论】:

  • 尝试在 format() 调用中将值转换为整数,而不是浮点数。
  • 这很奇怪;所有文档似乎都同意返回值应该至少0..255 范围内。他们都没有特别提到一个实数(与更常规的整数相反)可能被返回。你在什么操作系统上运行?会不会有一些色彩管理干扰?
  • 这看起来像一个错误 - 当我在我的 linux 机器上运行它时,我确实得到了浮点数而不是整数。简单的解决方法是将数字转换为 int 而不是 float。
  • @martineau:这是一个已知问题,将值 255 转换为带有 format() 的浮点数会产生 255.99-and-a-bit?
  • @usr2564301:这不是我所知道的——255.99609375 有点奇怪——但这里真正的问题是由于将结果从 askcolor() 转换为浮点数,不是整数,格式。

标签: python tkinter colors


【解决方案1】:

这似乎是 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)

我已提交错误报告:askcolor is returning floats for r,g,b values instead of ints

【讨论】:

【解决方案2】:

我想从颜色选择器对话框中获取颜色以传递给 create_line 方法。 askcolor 函数/方法返回 ((255.99609375, 0.0, 0.0), '#ff0000')。这是我需要的后一个值,所以这两行对我有用...

rgb, color = askcolor()

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

【讨论】:

    猜你喜欢
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2020-03-25
    • 2015-06-19
    • 1970-01-01
    相关资源
    最近更新 更多