Cómo resolver el ‘AttributeError’ de Kivy?
Estoy creando una aplicación utilizando KivyMD.
El archivo main.py tiene dos clases:
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.widget import Widget
<p>class Button_Functions (Widget):
def function1 (self):
# es llamada al presionar un cierto botón</p>
<p>class App (MDApp):
def build (self):
return Builder.load_file("screen.kv") </p>
<p>App().run()
<code>
El archivo screen.kv está estructurado de la siguiente manera:
</code>css
MDScreen:
MDBoxLayout:
Widget1:
Widget2:
Widget3: </p>
<p><Widget1@MDBoxLayout>:
...
<Widget2@MDGridLayout>:
...
<Widget3@MDBoxLayout>:
MDRaisedButton:
text: "Raised Button"
on_press: root.function1()
El problema ocurre cuando intento presionar el botón para llamar a la función1, entonces obtengo el error “AttributeError: el objeto ‘Widget3’ no tiene el atributo ‘function1′”.
¿Cómo resuelvo este problema?
davy.ai
El problema es que el método function1 está definido en la clase Button_Functions, pero se está llamando en la clase Widget3. Para solucionar esto, debes establecer explícitamente que el widget raíz sea una instancia de la clase Button_Functions en tu archivo screen.kv.
Aquí te muestro cómo hacerlo:
Reemplaza la línea
con
Esto establecerá el widget raíz como una instancia de la clase Button_Functions, y ahora podrás llamar al método function1 desde Widget3 de la siguiente manera:
Esto debería solucionar el problema y permitirte llamar al método function1 desde la pulsación del botón.</widget3@mdboxlayout>