【问题标题】:I can't access the "Root" of my Kivy code我无法访问我的 Kivy 代码的“根”
【发布时间】:2020-11-25 14:08:46
【问题描述】:

我做了一个代码,其中有一个根类“Screen”,在.kv文件的一侧,有一个“ScrollView”,带有一个“List”。 在 .py 文件中,我创建了一个循环,在 self.ids.scroll 列表中创建了几个按钮,使用 add_widget 和 Builder 来构建小部件:

Class Main(Screen):
    def test(self):
        print("Ok")

    def updatelist(self):
        for i in range(10):
            self.ids.scroll.add_widget(Builder.load_string(
            f"""Button:
                    text: str({i})
             """
                )
            )

问题是当我尝试在按钮内创建一个 on_release 时:

on_release: root.test()

它返回一个错误,说“Button”没有“test”函数,也就是没有找到根,函数所在的“Main”类,只限于自身。 我尝试在不使用“Builder”的情况下创建按钮,只使用:

for i in range(10):
    self.ids.scroll.add_widget(Button())

但是我遇到了问题,比如捕捉他的self.text,因为只能用Kv语言来捕捉。

任何帮助,谢谢!

【问题讨论】:

    标签: python-3.x kivy


    【解决方案1】:

    你必须在 kv 语言上引用当前正在运行的应用程序,否则它会在 Button 类中查找。

    要引用您的主要课程,请使用:
    on_release: app.root.test()

    【讨论】:

    • 非常感谢朋友,这个问题(看起来很简单)在我的代码中引发了其他几个问题,感谢您抽出时间:)
    • 嘿,我有一个类似的问题...我创建了一个 ScreenManager,并添加了 Screens,但是在 .py 上我无法访问这些屏幕类,你能帮帮我吗?我无法创建新问题。
    • 没有更多细节无法确定。但在.py 文件中,您可以执行以下操作:App.get_running_app().root.get_screen('screenname')
    猜你喜欢
    • 2017-03-22
    • 2016-11-21
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2021-10-06
    • 2020-08-24
    相关资源
    最近更新 更多