Вызов функции в Python файле от Kivy - PullRequest
1 голос
/ 18 июня 2020

Итак, я новичок в библиотеке KivyMD, поэтому это может быть довольно просто исправить, но я не могу найти ответ нигде в Google.

Python Код

from kivy.lang import Builder
from kivymd.app import MDApp


class MainApp(MDApp):
    def __init__(self, **kwargs):
        self.title = "Finance Fun"
        super().__init__(**kwargs)

    def build(self):
        self.root = Builder.load_file('my.kv')

    def Work(self, instance):
        print("Hello")


if __name__ == "__main__":
    MainApp().run()

Код Киви

BoxLayout:
    orientation: "vertical"

    MDBottomNavigation:
        id: panel

        MDBottomNavigationItem:
            name: "files1"
            text: "Money"
            icon: "cash-plus"

            BoxLayout:
                orientation: "vertical"
                size_hint_y: None
                height: self.minimum_height
                spacing: dp(10)
                pos_hint: {"center_x": .5, "center_y": .5}

                MDFillRoundFlatIconButton:
                    id: work
                    text: "Work"
                    icon: "hammer-wrench"
                    pos_hint: {"center_x": .5}
                    on_release: root.Work()

Итак, если вы видите в MDFillRoundFlatIconButton: Я звоню on_release: root .Work () , которая является функцией в файле python.

Появляется ошибка :

on_release: root.Work()
   File "kivy/weakproxy.pyx", line 32, in kivy.weakproxy.WeakProxy.__getattr__
 AttributeError: 'BoxLayout' object has no attribute 'Work'

Если бы вы могли мне помочь, это было бы очень признателен Спасибо!

1 Ответ

1 голос
/ 18 июня 2020

В kv lang (то, что вы называете «кодом Kivy» в своем вопросе) root относится к виджету root, который в вашем случае является BoxLayout (первая строка). В вашем коде python вы определяете функцию Work() для MainApp. Вы можете сослаться на свое приложение в kv, набрав app. Таким образом, ваш kv должен выглядеть следующим образом:

 on_release: app.Work()

Что означает app и root в файле kv, описано здесь .

...