Kivy fuera de la regla de la inherencia

Quiero especificar un botón especial para no tener que ajustar cada botón que uso, sin embargo, quiero que su evento active una función en una clase diferente.

main.py

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.stacklayout import StackLayout
from kivy.properties import ObjectProperty


class FancyButton(Button):
    imp = ObjectProperty(None)


class Important(StackLayout):

    def NoInspiration(self, smile):
        print("Received: {}".format(smile))


class TestApp(App):
    def build(self):
        pass

if __name__ == '__main__':
    TestApp().run()

test.kv (trabajando)

#:kivy 1.9.0

<FancyButton@Button>:
    on_release: self.parent.NoInspiration(':)')


<Important>:
    id: imp

    FancyButton:
        text: "smiley"

BoxLayout:
    Important

Recibido: :)

test.kv (no trabajando)

#:kivy 1.9.0

<FancyButton>:
    on_release: self.parent.NoInspiration(':)')


<Important>:
    id: imp

    BoxLayout:
        FancyButton:
            text: "smiley"

BoxLayout:
    Important

En el segundo test.kv agregué 'BoxLayout:' delante de FancyButton y de repente recibí el error:

AttributeError: el objeto 'BoxLayout' no tiene el atributo 'NoInspiration'

Pregunta¿Por qué self.parent solo se refiere al padre directo y no a <Importante> en el segundo ejemplo?¿Cómo puedo tener on_release: en <FancyButton> apunte a la función NoInspiration () mientras mantengo la función en <Importante>?Preguntas de seguimientoKivy regla inherencia con add_widget ()Kivy fuera de la regla inherencia 2

Respuestas a la pregunta(1)

Su respuesta a la pregunta