1 year ago
#374121

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