PyGObject,十六进制颜色到Gdk.RGBA

时间:2014-07-07 20:40:07

标签: pygobject

我找到了这段代码

gdk_rgba_parse ()

应该允许我做类似

的事情
Gdk.RGBA.parse(#7F7F7F)

错误:

 TypeError: unbound method parse() must be called with RGBA instance as first argument   (got str instance instead)

使用RGBA颜色(百分比,从0到1)

文档:

https://developer.gnome.org/gdk3/stable/gdk3-RGBA-Colors.html#gdk-rgba-parse http://www.crategus.com/books/cl-cffi-gtk/pages/gdk_fun_gdk-rgba-parse.html

但我有点失落,我很难从C翻译成PyGOBject并理解函数的论点..任何帮助都将不胜感激!


由于我没有找到合适的解决方案,我制作了这个转换器:

def hex_to_rgba(value):
    value = value.lstrip('#')
    if len(value) == 3:
        value = ''.join([v*2 for v in list(value)])
    (r1,g1,b1,a1)=tuple(int(value[i:i+2], 16) for i in range(0, 6, 2))+(1,) 
    (r1,g1,b1,a1)=(r1/255.00000,g1/255.00000,b1/255.00000,a1)

    return (r1,g1,b1,a1)

有效..

1 个答案:

答案 0 :(得分:4)

该函数需要GdkRGBA结构的实例:

gboolean
gdk_rgba_parse (GdkRGBA *rgba,
                const gchar *spec);

这转换为Python作为Gdk.RGBA实例上的方法,它改变了结构内容:

color = Gdk.RGBA()
color.parse('#7F7F7F')
color.to_string()  # 'rgb(127,127,127)'

对于Python来说,它不是一个非常好的API,但每隔一段时间你就必须使用基于内省的绑定来处理这些事情。 lazka的文档应该比C语言更有帮助:

http://lazka.github.io/pgi-docs/#Gdk-3.0/structs/RGBA.html#Gdk.RGBA.parse