1 year ago

#374121

test-img

Diego Gc

KivyMD Widget MDChip - TypeError: Properties ['callback'] passed to __init__ may not be existing property names

I'm trying to "dynamically" create an MDChip widget (up to 6) using Python and KivyMD. Such widgets will be created having as text a value previously written by the user in a MDTextField and will have as callback a function which will simply delete the MDChip once the user clicks on it.

The widget used to work perfectly, however all of a sudden the program started crashing every time I try to create the MDChip with the error code

TypeError: Properties ['callback'] passed to __init__ may not be existing property names. 

PYTHON CODE

class ComentariosContent(BoxLayout):
    numero_cotizaciones = 0

    def on_checkbox_active(self, checkbox, value):
        if value:
            self.ids.numero_cotizacion.enabled = True
            self.ids.numero_cotizacion.opacity = 1
        else:
            self.ids.numero_cotizacion.text = ''
            self.ids.numero_cotizacion.enabled = False
            self.ids.numero_cotizacion.opacity = 0

    def validar_cotizacion(self):
        if len(self.ids.numero_cotizacion.text) == 3 and self.ids.numero_cotizacion.text == 'COT':
            self.ids.numero_cotizacion.text = ''
            self.ids.boton_confirmar_cotizacion.opacity = 0
        if len(self.ids.numero_cotizacion.text) > 0:
            self.ids.boton_confirmar_cotizacion.opacity = 1

    def create_mdchip(self, *args):

        if self.numero_cotizaciones < 6:
            self.numero_cotizaciones += 1
            if self.numero_cotizaciones % 2 != 0:
                new_chip = MDChip(text=self.ids.numero_cotizacion.text, icon='close', color=[0.749, 0.808, 0.274, 1],
                                  callback=self.delete_chip)
                self.ids.chip_container.add_widget(new_chip)
                self.ids.numero_cotizacion.text = ''
            else:
                new_chip = MDChip(text=self.ids.numero_cotizacion.text, icon='close', color=[0.204, 0.565, 0.494, 1],
                                  callback=self.delete_chip)

                self.ids.chip_container.add_widget(new_chip)
                self.ids.numero_cotizacion.text = ''

        else:
            self.ids.numero_cotizacion.text = ''
            toast('Número límite de cotizaciones alcanzado')

        self.ids.boton_confirmar_cotizacion.opacity = 0

    def delete_chip(self, instance, chip_widget):
        index = self.ids.chip_container.children.index(instance)
        self.ids.chip_container.remove_widget(instance)
        if self.numero_cotizaciones > 0:
            self.numero_cotizaciones -= 1

KIVY CODE

<ComentariosContent>:
    size_hint: 1, None
    padding: '7.5dp'
    height: self.minimum_height
    orientation: 'vertical'
    

    MDBoxLayout:
        orientation: 'horizontal'
        adaptive_height: True
        size_hint: 0.8, None
        pos_hint: {"center_x":0.5, "center_y":0.5}
        spacing: '7.5dp'
        MDLabel:
            text: 'Me llevo material para entregar'
            pos_hint: {"x":0, "top":0.6}
            multiline: 'True'
            font_style: 'Button'
            font_size: '12sp'
            size_hint_x: 0.10
        MDCheckbox:
            size_hint: None, None
            size: dp(50), dp(50)
            halign:'left'
            pos_hint: {"x":0, "top":0.6}
            on_active:
                root.on_checkbox_active(*args)
        MDBoxLayout:
            size_hint_x: 0.025
        CotizacionMDTextField:
            id: numero_cotizacion
            mode: "rectangle"
            enabled: False
            opacity: 0
            multiline: 'False'
            pos_hint: {"x":0, "top":0.6}
            hint_text: 'No. cotizaci' + app.acento_o + 'n'
            valign: 'center'
            write_tab: False
            size_hint: 0.15, 1
            font_size: '16sp'
            on_text: 
                root.validar_cotizacion()
        TooltipMDIconButton:
            id: boton_confirmar_cotizacion
            enabled: False
            opacity: 0
            tooltip_text: 'Confirmar \ncotizaci' + app.acento_o + 'n' 
            icon: 'check-outline'
            pos_hint: {"center_x":0, "top":0.55}
            theme_text_color: "Custom"
            text_color: app.theme_cls.primary_color
            on_press: root.create_mdchip()
        
        MDGridLayout:
            cols: 3
            id: chip_container
            size_hint_x: 0.30
            spacing: '5dp'
            pos_hint: {"x":0, "top":0.55}

The questions are: Is there a workaround to avoid this error? Do I need to use a different approach? Why did callback suddenly stopped working?

Thanks a lot in advance.

EDIT: INCLUDE FULL ERROR

Traceback (most recent call last):    
File "kivy\_event.pyx", line 235, in kivy._event.EventDispatcher.__init__  
 TypeError: object.__init__() takes exactly one argument (the instance to initialize)    
 The above exception was the direct cause of the following exception:    

Traceback (most recent call last):    
File "D:/Users/diego/OneDrive/Documentos/Power Tech de México/2021/Power Tech App/0. Desktop App/ptm_app_desk.py", line 3086, in <module>
 PowerAppDesk().run()    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\app.py", line 955, in run
 runTouchApp()    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\base.py", line 574, in runTouchApp
 EventLoop.mainloop()    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\base.py", line 339, in mainloop
 self.idle()    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\base.py", line 383, in idle
 self.dispatch_input()    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\base.py", line 334, in dispatch_input
 post_dispatch_input(*pop(0))    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\base.py", line 263, in post_dispatch_input
 listener.dispatch('on_motion', etype, me)    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\core\window\__init__.py", line 1664, in on_motion
 self.dispatch('on_touch_up', me)    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\core\window\__init__.py", line 1701, in on_touch_up
 if w.dispatch('on_touch_up', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\screenmanager.py", line 1220, in on_touch_up
 return super(ScreenManager, self).on_touch_up(touch)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 611, in on_touch_up
 if child.dispatch('on_touch_up', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\relativelayout.py", line 322, in on_touch_up
 ret = super(RelativeLayout, self).on_touch_up(touch)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 611, in on_touch_up
 if child.dispatch('on_touch_up', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 611, in on_touch_up
 if child.dispatch('on_touch_up', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 611, in on_touch_up
 if child.dispatch('on_touch_up', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\screenmanager.py", line 1220, in on_touch_up
 return super(ScreenManager, self).on_touch_up(touch)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 611, in on_touch_up
 if child.dispatch('on_touch_up', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\relativelayout.py", line 322, in on_touch_up
 ret = super(RelativeLayout, self).on_touch_up(touch)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 611, in on_touch_up
 if child.dispatch('on_touch_up', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 611, in on_touch_up
 if child.dispatch('on_touch_up', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivymd\uix\behaviors\ripple_behavior.py", line 296, in on_touch_up
 return super().on_touch_up(touch)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\behaviors\button.py", line 163, in on_touch_up
 return super(ButtonBehavior, self).on_touch_up(touch)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 611, in on_touch_up
 if child.dispatch('on_touch_up', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 611, in on_touch_up
 if child.dispatch('on_touch_up', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\scrollview.py", line 968, in on_touch_up
 if self.dispatch('on_scroll_stop', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\scrollview.py", line 1005, in on_scroll_stop
 self.simulate_touch_down(touch)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\scrollview.py", line 668, in simulate_touch_down
 ret = super(ScrollView, self).on_touch_down(touch)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 589, in on_touch_down
 if child.dispatch('on_touch_down', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 589, in on_touch_down
 if child.dispatch('on_touch_down', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 589, in on_touch_down
 if child.dispatch('on_touch_down', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 589, in on_touch_down
 if child.dispatch('on_touch_down', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 589, in on_touch_down
 if child.dispatch('on_touch_down', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\relativelayout.py", line 306, in on_touch_down
 ret = super(RelativeLayout, self).on_touch_down(touch)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 589, in on_touch_down
 if child.dispatch('on_touch_down', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 589, in on_touch_down
 if child.dispatch('on_touch_down', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 589, in on_touch_down
 if child.dispatch('on_touch_down', touch):    
File "kivy\_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch   
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivymd\uix\behaviors\ripple_behavior.py", line 255, in on_touch_down
 super().on_touch_down(touch)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivymd\uix\button.py", line 969, in on_touch_down
 return super().on_touch_down(touch)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\behaviors\button.py", line 151, in on_touch_down
 self.dispatch('on_press')    
File "kivy\_event.pyx", line 727, in kivy._event.EventDispatcher.dispatch    
File "kivy\_event.pyx", line 1307, in kivy._event.EventObservers.dispatch    
File "kivy\_event.pyx", line 1191, in kivy._event.EventObservers._dispatch  
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\lang\builder.py", line 55, in custom_callback
 exec(__kvlang__.co_value, idmap)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\kv\travelManagerWindow.kv", line 1183, in <module>
 on_press: root.create_mdchip()    
File "D:/Users/diego/OneDrive/Documentos/Power Tech de México/2021/Power Tech App/0. Desktop App/ptm_app_desk.py", line 820, in create_mdchip
 new_chip = MDChip(text=self.ids.numero_cotizacion.text, icon='close', color=[0.749, 0.808, 0.274, 1],    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivymd\uix\chip.py", line 245, in __init__
 super().__init__(**kwargs)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivymd\theming.py", line 1140, in __init__
 super().__init__(**kwargs)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\behaviors\button.py", line 121, in
__init__
 super(ButtonBehavior, self).__init__(**kwargs)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\boxlayout.py", line 145, in __init__
 super(BoxLayout, self).__init__(**kwargs)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\layout.py", line 76, in __init__
 super(Layout, self).__init__(**kwargs)    
File "D:\Users\diego\OneDrive\Documentos\Power Tech de México\2021\Power Tech App\0. Desktop App\venv\lib\site-packages\kivy\uix\widget.py", line 357, in __init__
 super(Widget, self).__init__(**kwargs)    
File "kivy\_event.pyx", line 238, in kivy._event.EventDispatcher.__init__  
TypeError: Properties ['callback'] passed to __init__ may not be existing property names. 
Valid properties are ['_color', 'adaptive_height', 'always_release', 'center', 'center_x', 'center_y', 
'check', 'children', 'cls', 'color', 'device_ios', 'disabled', 'height', 'icon', 'icon_color', 'ids', 
'last_touch', 'min_state_time', 'minimum_height', 'minimum_size', 'minimum_width', 'motion_filter', 
'opacity', 'opposite_colors', 'orientation', 'padding', 'parent', 'pos', 'pos_hint', 'radius', 'right', 
'selected_chip_color', 'size', 'size_hint', 'size_hint_max', 'size_hint_max_x', 'size_hint_max_y', 
'size_hint_min', 'size_hint_min_x', 'size_hint_min_y', 'size_hint_x', 'size_hint_y', 'spacing', 'state', 
'text', 'text_color', 'theme_cls', 'top', 'widget_style', 'width', 'x', 'y']

python

callback

kivy

typeerror

kivymd

0 Answers

Your Answer

Accepted video resources