kivymd/KivyMD

ValueError: None is not allowed for MDSnackbarActionButtonText.color when is set the theme_text_color.

RicardoDazzling opened this issue · 4 comments

Description of the Bug

Hello everyone! I'm with a issue with the theme text color. I want to create a snackbar and give to a button the default error text color. But when I change the theme_text_color to "Error" it give-me a None Value Exception. I think that is because in the new update, the default theme text colors aren't implemented... It will be implemented in the future?

Code and Logs

It can be repliqued with a simple creation of a snackbar with the action button with the property theme_text_color.
Like this:

from kivy.metrics import dp
from kivymd.app import MDApp
from kivymd.uix.snackbar import MDSnackbar, MDSnackbarSupportingText, MDSnackbarButtonContainer, MDSnackbarActionButton, \
    MDSnackbarActionButtonText


class MainApp(MDApp):
    def build(self):
        pass

    def on_start(self):
        MDSnackbar(
            MDSnackbarSupportingText(
                text="Single-line snackbar with action",
            ),
            MDSnackbarButtonContainer(
                MDSnackbarActionButton(
                    MDSnackbarActionButtonText(
                        theme_text_color="Error",
                        text="Action button"
                    ),
                ),
                pos_hint={"center_y": 0.5}
            ),
            y=dp(24),
            orientation="horizontal",
            pos_hint={"center_x": 0.5},
            size_hint_x=0.5,
            auto_dismiss=False
        ).open()


if __name__ == '__main__':
    app = MainApp()
    app.run()
    

Log:

[INFO   ] [Logger      ] Record log in .kivy\logs\kivy_24-07-02_0.txt
[INFO   ] [deps        ] Successfully imported "kivy_deps.angle" 0.4.0
[INFO   ] [deps        ] Successfully imported "kivy_deps.glew" 0.3.1
[INFO   ] [deps        ] Successfully imported "kivy_deps.sdl2" 0.7.0
[INFO   ] [Kivy        ] v2.3.0
[INFO   ] [Kivy        ] Installed at "...\.env\Lib\site-packages\kivy\__init__.py"
[INFO   ] [Python      ] v3.12.0 (tags/v3.12.0:0fb18b0, Oct  2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)]
[INFO   ] [Python      ] Interpreter at "D:\DR\Python\.envs\agendamd\Scripts\python.exe"
[INFO   ] [Logger      ] Purge log fired. Processing...
[INFO   ] [Logger      ] Purge finished!
[INFO   ] [KivyMD      ] 2.0.1.dev0, git-Unknown, 2024-05-08 (installed at "...\.env\Lib\site-packages\kivymd\__init__.py")
[INFO   ] [Factory     ] 195 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO   ] [Text        ] Provider: sdl2
[INFO   ] [Window      ] Provider: sdl2
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] GLEW initialization succeeded
[INFO   ] [GL          ] Backend used <glew>
[INFO   ] [GL          ] OpenGL version <b'4.6.0 - Build 27.20.100.7988'>
[INFO   ] [GL          ] OpenGL vendor <b'Intel'>
[INFO   ] [GL          ] OpenGL renderer <b'Intel(R) HD Graphics 630'>
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version <b'4.60 - Build 27.20.100.7988'>
[INFO   ] [GL          ] Texture max size <16384>
[INFO   ] [GL          ] Texture max units <32>
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Clipboard   ] Provider: winctypes
[INFO   ] [GL          ] NPOT texture support is available
 Traceback (most recent call last):
   File "...\.env\Lib\site-packages\kivy\lang\builder.py", line 705, in _apply_rule
     setattr(widget_set, key, value)
   File "kivy\\weakproxy.pyx", line 35, in kivy.weakproxy.WeakProxy.__setattr__
   File "kivy\\properties.pyx", line 520, in kivy.properties.Property.__set__
   File "kivy\\properties.pyx", line 564, in kivy.properties.Property.set
   File "kivy\\properties.pyx", line 555, in kivy.properties.Property.set
   File "kivy\\properties.pyx", line 593, in kivy.properties.Property.check
 ValueError: None is not allowed for MDSnackbarActionButtonText.color
 
 During handling of the above exception, another exception occurred:
 
 Traceback (most recent call last):
   File "snackbar.py", line 35, in <module>
     app.run()
   File "...\.env\Lib\site-packages\kivy\app.py", line 955, in run
     self._run_prepare()
   File "...\.env\Lib\site-packages\kivymd\app.py", line 142, in _run_prepare
     super()._run_prepare()
   File "...\.env\Lib\site-packages\kivy\app.py", line 950, in _run_prepare
     self.dispatch('on_start')
   File "kivy\\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch
   File "snackbar.py", line 18, in on_start
     MDSnackbarActionButtonText(
   File "...\.env\Lib\site-packages\kivymd\uix\label\label.py", line 739, in __init__
     super().__init__(*args, **kwargs)
   File "...\.env\Lib\site-packages\kivymd\uix\behaviors\declarative_behavior.py", line 311, in __init__
     super().__init__(**kwargs)
   File "...\.env\Lib\site-packages\kivymd\theming.py", line 977, in __init__
     super().__init__(**kwargs)
   File "...\.env\Lib\site-packages\kivymd\uix\behaviors\backgroundcolor_behavior.py", line 164, in __init__
     super().__init__(**kwarg)
   File "...\.env\Lib\site-packages\kivy\uix\label.py", line 319, in __init__
     super(Label, self).__init__(**kwargs)
   File "...\.env\Lib\site-packages\kivy\uix\widget.py", line 366, in __init__
     self.apply_class_lang_rules(
   File "...\.env\Lib\site-packages\kivy\uix\widget.py", line 470, in apply_class_lang_rules
     Builder.apply(
   File "...\.env\Lib\site-packages\kivy\lang\builder.py", line 545, in apply
     self._apply_rule(
   File "...\.env\Lib\site-packages\kivy\lang\builder.py", line 714, in _apply_rule
     raise BuilderException(rule.ctx, rule.line,
 kivy.lang.builder.BuilderException: Parser: File "<inline>", line 76:
 ...
      74:    markup: True
      75:    color:
 >>   76:        self.theme_cls.inversePrimaryColor \
      77:        if self.theme_text_color == "Primary" else \
      78:        self.text_color
 ...
 ValueError: None is not allowed for MDSnackbarActionButtonText.color
   File "...\.env\Lib\site-packages\kivy\lang\builder.py", line 705, in _apply_rule
     setattr(widget_set, key, value)
   File "kivy\\weakproxy.pyx", line 35, in kivy.weakproxy.WeakProxy.__setattr__
   File "kivy\\properties.pyx", line 520, in kivy.properties.Property.__set__
   File "kivy\\properties.pyx", line 564, in kivy.properties.Property.set
   File "kivy\\properties.pyx", line 555, in kivy.properties.Property.set
   File "kivy\\properties.pyx", line 593, in kivy.properties.Property.check
 

Process finished with exit code 1

Versions

  • OS: Windows 10
  • Python: 3.12
  • Kivy: 2.3.0
  • KivyMD: master

Attach minimal code

Done. Sorry don't send the minimal code, when I send the issue I was late for an appointment.

I know that this compontent exists, to bypass this issue I use "Custom" theme_text_color and set the text_color to "errorColor", but the optionProperty from theme_text_color accepts "Error", "Hint" and "Secundary", but already this options aren't really accepted, raising a exception. I think that it can be removed to accept only "Primary" and "Custom", the types already supported, or implemented the other. I'm just sharing that this isn't working as expected.

Thank you for the help, and good work!