Python error when using image widget (ESPHome icon)

When trying to use a image widget I get a very long Python error which ends with: AttributeError: ‘EList’ object has no attribute ‘get’

Here is the widget specification

                  - image:
                      - file: images/home.png
                        type: rgb
                        id: home_image_widget

I have tried using url images, svgs, and different types, all seem to give the same result

Hello LaMalditaG,

I’m not familiar with any widgets in home assistant. Can you explain metter what you are using and what you are trying to do?

hello, this was referring to EspHome, it seems that I forgot to mention it.

What I’m trying to do is to show a custom icon using lvgl in a screen connected to a Esp32

1 Like

Then I shall bump it to the ESPHome category for you so someone that might know might see it.

Post the logs.

I don’t exactly know what logs you are referring to, but here is what I get after running esphome run test.yaml:

INFO ESPHome 2025.9.1
INFO Reading configuration test.yaml...
INFO Detected timezone 'Europe/Madrid'
ERROR Unexpected exception while reading configuration:
Traceback (most recent call last):
  File "/usr/bin/esphome", line 8, in <module>
    sys.exit(main())
             ~~~~^^
  File "/usr/lib/python3.13/site-packages/esphome/__main__.py", line 1269, in main
    return run_esphome(sys.argv)
  File "/usr/lib/python3.13/site-packages/esphome/__main__.py", line 1247, in run_esphome
    config = read_config(dict(args.substitution) if args.substitution else {})
  File "/usr/lib/python3.13/site-packages/esphome/config.py", line 1184, in read_config
    res = load_config(command_line_substitutions)
  File "/usr/lib/python3.13/site-packages/esphome/config.py", line 1041, in load_config
    return _load_config(command_line_substitutions)
  File "/usr/lib/python3.13/site-packages/esphome/config.py", line 1031, in _load_config
    return validate_config(config, command_line_substitutions)
  File "/usr/lib/python3.13/site-packages/esphome/config.py", line 955, in validate_config
    result.run_validation_steps()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.13/site-packages/esphome/config.py", line 178, in run_validation_steps
    task.step.run(self)
    ~~~~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/site-packages/esphome/config.py", line 653, in run
    validated = schema(self.conf)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 37, in __call__
    res = super().__call__(data)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)
           ~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 779, in validate_callable
    return schema(data)
  File "/usr/lib/python3.13/site-packages/esphome/components/lvgl/__init__.py", line 495, in lvgl_config_schema
    return [LVGL_SCHEMA(config)]
            ~~~~~~~~~~~^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 259, in __call__
    return self._exec((Schema(val) for val in self.validators), v)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 382, in _exec
    v = func(v)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)
           ~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 779, in validate_callable
    return schema(data)
  File "/usr/lib/python3.13/site-packages/esphome/components/lvgl/schemas.py", line 530, in validator
    value = result(value)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 37, in __call__
    res = super().__call__(data)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)
           ~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 549, in validate_dict
    return base_validate(path, data.items(), out)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 151, in validate_mapping
    cval = cvalue(key_path, value)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 779, in validate_callable
    return schema(data)
  File "/usr/lib/python3.13/site-packages/esphome/config_validation.py", line 461, in validator
    return list_schema(value)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 37, in __call__
    res = super().__call__(data)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)
           ~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 590, in validate_sequence
    cval = validate(index_path, value)
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 256, in _run
    return self._exec(self._compiled, value, path)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 384, in _exec
    v = func(path, v)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 779, in validate_callable
    return schema(data)
  File "/usr/lib/python3.13/site-packages/esphome/components/lvgl/schemas.py", line 530, in validator
    value = result(value)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 37, in __call__
    res = super().__call__(data)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)
           ~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 549, in validate_dict
    return base_validate(path, data.items(), out)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 151, in validate_mapping
    cval = cvalue(key_path, value)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 779, in validate_callable
    return schema(data)
  File "/usr/lib/python3.13/site-packages/esphome/config_validation.py", line 461, in validator
    return list_schema(value)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 37, in __call__
    res = super().__call__(data)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)
           ~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 590, in validate_sequence
    cval = validate(index_path, value)
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 256, in _run
    return self._exec(self._compiled, value, path)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 384, in _exec
    v = func(path, v)
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 256, in _run
    return self._exec(self._compiled, value, path)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 309, in _exec
    return func(path, v)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 549, in validate_dict
    return base_validate(path, data.items(), out)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 151, in validate_mapping
    cval = cvalue(key_path, value)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 779, in validate_callable
    return schema(data)
  File "/usr/lib/python3.13/site-packages/esphome/components/lvgl/schemas.py", line 530, in validator
    value = result(value)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 37, in __call__
    res = super().__call__(data)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)
           ~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 549, in validate_dict
    return base_validate(path, data.items(), out)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 151, in validate_mapping
    cval = cvalue(key_path, value)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 779, in validate_callable
    return schema(data)
  File "/usr/lib/python3.13/site-packages/esphome/config_validation.py", line 461, in validator
    return list_schema(value)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 37, in __call__
    res = super().__call__(data)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)
           ~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 590, in validate_sequence
    cval = validate(index_path, value)
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 256, in _run
    return self._exec(self._compiled, value, path)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 384, in _exec
    v = func(path, v)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 779, in validate_callable
    return schema(data)
  File "/usr/lib/python3.13/site-packages/esphome/components/lvgl/schemas.py", line 530, in validator
    value = result(value)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 37, in __call__
    res = super().__call__(data)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)
           ~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 549, in validate_dict
    return base_validate(path, data.items(), out)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 151, in validate_mapping
    cval = cvalue(key_path, value)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 779, in validate_callable
    return schema(data)
  File "/usr/lib/python3.13/site-packages/esphome/config_validation.py", line 461, in validator
    return list_schema(value)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 37, in __call__
    res = super().__call__(data)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 205, in __call__
    return self._compiled([], data)
           ~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 590, in validate_sequence
    cval = validate(index_path, value)
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 256, in _run
    return self._exec(self._compiled, value, path)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 384, in _exec
    v = func(path, v)
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 256, in _run
    return self._exec(self._compiled, value, path)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/voluptuous/validators.py", line 309, in _exec
    return func(path, v)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 549, in validate_dict
    return base_validate(path, data.items(), out)
  File "/usr/lib/python3.13/site-packages/esphome/voluptuous_schema.py", line 151, in validate_mapping
    cval = cvalue(key_path, value)
  File "/usr/lib/python3.13/site-packages/voluptuous/schema_builder.py", line 779, in validate_callable
    return schema(data)
  File "/usr/lib/python3.13/site-packages/esphome/components/lvgl/schemas.py", line 518, in validator
    if value and (layout := value.get(df.CONF_LAYOUT)):
                            ^^^^^^^^^
AttributeError: 'EList' object has no attribute 'get'

Yes, those are the logs. Without seeing the rest of your yaml, it’s hard to be sure, but I suspect you are trying to define an image inside the lvgl config - that’s wrong, you need to define the image in the top-level image component and refer to it using its id in an image widget using the src option - read the docs.

You are right, I defined the image inside the lvgl config. But even defining it outside and using it inside lvgl, it gave the same error.
However, I discovered the problem, I defined the widget like this:

 - image:
   - src: home_image

but actually, it should be like this:

 - image:
     src: home_image

because it’s not a list. I didn’t read the docs correctly, I don’t know why I assumed it was a list.

Thank you

Great. So obviously the error message should have been more helpful, throwing a stack trace isn’t very user friendly, so I’ll look at a fix for that, but glad you’re on track now.

1 Like