【问题标题】:Calling Function in Python file from Kivy从 Kivy 调用 Python 文件中的函数
【发布时间】:2020-06-18 05:13:26
【问题描述】:

所以我是 KivyMD 库的新手,所以这可能很容易解决,但我无法在谷歌的任何地方找到答案。

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'

如果您能帮助我,将不胜感激 谢谢!

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    在 kv lang 中(您在问题中指的是“Kivy 代码”)root 指的是根小部件,在您的情况下是 BoxLayout(第一行)。在您的 python 代码中,您为MainApp 定义了Work() 函数。您可以通过app 在 kv 中引用您的应用程序。所以你的 kv 应该如下所示:

     on_release: app.Work()
    

    approot 在 kv 文件中的含义在 here 中进行了描述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-16
      • 2017-05-10
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多