【问题标题】:PyGObject, hex color to Gdk.RGBAPyGObject,十六进制颜色到 Gdk.RGBA
【发布时间】:2014-07-07 20:40:06
【问题描述】:

我找到了这段代码

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)

它有效..

【问题讨论】:

  • 类似于 (color:=Gdk.RGBA()).parse('#7F7F7F')

标签: pygobject


【解决方案1】:

该函数需要一个 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

【讨论】:

    猜你喜欢
    • 2019-06-16
    • 2021-03-08
    • 1970-01-01
    • 2019-10-29
    • 2014-07-03
    • 1970-01-01
    • 2012-09-14
    • 2018-08-26
    • 2013-03-16
    相关资源
    最近更新 更多