如何在Gizeh中修改或获取Element的填充颜色?
修改和获取Gizeh元素的填充颜色
Gizeh的元素(比如你示例里的圆形)并没有直接暴露fill这类可直接赋值的属性,所有创建时传入的参数都统一存在元素对象的_args内部字典里。要修改或获取填充颜色,需要通过这个字典操作:
修改填充颜色
import gizeh as gz circle = gz.circle(10, xy=(100, 100), fill=(1, 0, 0)) # 修改填充颜色 circle._args["fill"] = (0, 1, 0)
获取填充颜色
current_fill = circle._args.get("fill") print(current_fill) # 输出 (0,1,0)
为什么直接circle.fill = (0,1,0)无效?
因为Gizeh的Element类(包括Circle这类具体元素)初始化时,并没有把fill绑定为实例属性,而是将所有构造参数统一存入_args字典。绘制元素时,程序会从这个字典读取参数配置绘图上下文。你直接赋值circle.fill只是给对象新增了一个无关属性,不会影响实际的填充颜色。
源码中的存储逻辑
查看源码时会发现,所有Element子类(比如Circle)的__init__方法都会调用父类Element的构造函数,而Element的__init__会把传入的参数打包存入self._args。以Circle类为例:
class Circle(Element): def __init__(self, r, xy=(0,0), fill=None, stroke=None, stroke_width=1, stroke_linecap="butt", stroke_linejoin="miter"): Element.__init__(self, "circle", locals())
这里的locals()会把当前方法的局部变量(除self外)转为字典,传给Element的构造函数,最终存入self._args中。
内容的提问来源于stack exchange,提问作者KarlTheGreat
相关产品推荐
相关产品推荐

