为啥 kv 文件变量不接受自我?

Posted

技术标签:

【中文标题】为啥 kv 文件变量不接受自我?【英文标题】:Why don't the kv file variables accept self?为什么 kv 文件变量不接受自我? 【发布时间】:2021-05-26 20:38:30 【问题描述】:

文件的kv变量如何使用self引用文件的py变量?

事实上,App 只存在于类中,而只存在于函数中。

kv 文件变量只接受应用程序:

'''
MDFlatButton:
    id: flat
    text: app.gg
'''

但我需要它像这样工作:

class Test(MDApp):
    gg = '123'
MDFlatButton:
    id: flat
    text: self.gg
class Test(MDApp):
    def build(self):
        gg = '123'

要引用函数内部的变量,你需要self,它不接受kv。问题:如何让它工作而不报错?

MDFlatButton: 
    id: flat 
    text: self.gg

或者其他,但是 MDFlatButton 按钮从函数中获取文本参数。

帮助(

【问题讨论】:

您可以在kv 中使用self。请发帖minimal reproducible example。 【参考方案1】:

出来!这对我有用:

from kivymd.app import MDApp
from kivy.lang import Builder
KV = '''
Screen:
    MDFlatButton:
        id: flat
        text: app.gg
'''
class Test(MDApp):
    def build(self):
        self.gg = '555'
        return Builder.load_string(KV)
Test().run()

不知道我做了什么,但是这个工作

【讨论】:

【参考方案2】:

你可以使用root

MDFlatButton: 
    id: flat 
    text: root.gg

第二个错误是你没有将它设置为self。

class Test(MDApp):
    def build(self):
        self.gg = '123' # <---- was gg = '123'

【讨论】:

我正在尝试,但收到错误:文件“C:\Users\lolo\PycharmProjects\FindWord\venv\lib\site-packages\kivy\lang\builder.py”,第 695 行,在 _apply_rule 值中,bound = create_handler(文件“C:\Users\lolo\PycharmProjects\FindWord\venv\lib\site-packages\kivy\lang\builder.py”,第 245 行,在 create_handler 中引发 BuilderException(rule.ctx,规则线, 添加了另一条关于在没有self 的情况下设置gg 的评论。不确定您遇到的错误...

以上是关于为啥 kv 文件变量不接受自我?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 pd.read_csv 不接受 Windows 文件路径中的变量名?

为啥 evbuffer_add_printf 只接受静态变量而不接受“动态”变量?

为啥 require() 函数不接受变量? [复制]

为啥视图修饰符不能接受不可变变量?

为啥局部变量会自我更新? [复制]

为啥 MariaDB 不接受我的字符串变量作为我的 sql 查询中的表名?