【问题标题】:Why are my Kivy methods not defined?为什么我的 Kivy 方法没有定义?
【发布时间】:2017-05-30 01:55:10
【问题描述】:

这似乎是一个基本问题,但我看不出这里有什么问题。我有一个带有表单小部件的构建器字符串:

<WidgetName>:
    GridLayout:
        Label:
            text: str(get_text())

函数 get_text() 在构建器字符串下方的同一文件中定义。比如:

def get_text():
    return "hello"

我得到:NameError:未定义名称“get_text”。这里出了什么问题?我尝试在小部件类中定义函数并使用 root.get_text 引用它,但随后出现 NoneType 错误。提前致谢。

【问题讨论】:

    标签: python python-3.x kivy kivy-language


    【解决方案1】:

    构建器无法从您的 .kv 文件访问您的 py 文件。您可以像#: import get_text mypythonfile.get_text 一样将您的函数导入.kv 中,或者您可以将您的函数放在您的应用程序类中,然后使用app.get_text()

    【讨论】:

    • 谢谢,这解决了问题。如果您不介意,我有两个后续问题:1)如何从 python 文件中导入所有方法(对于 .kv 文件,相当于from mypythonfile import *,2)当我尝试调用函数以显示时标签的文本(如上),我得到一个 NoneType 错误。有什么想法吗?
    • 1) 不幸的是,我认为这是不可能的。 2)嗯,有些东西是没有的。也许您没有正确调用该函数,或者它没有返回任何内容。如果您需要更多帮助,请发布代码。
    • 现在我可以访问我需要在我的 .kv 文件中使用的函数,我可以引用它们而不会出现 NameError。但是,如果我尝试将标签的文本设置为如上所示的函数的输出 (text: str(get_text())),则会收到以下错误:AttributeError: 'NoneType' object has no attribute 'bind'。不要认为 None 被返回 - 例如 get_text() 函数返回一个字符串。
    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    相关资源
    最近更新 更多