Почему переменные kv файла не принимают self?

Как переменная kv файла может сослаться на переменную py файла, использую self?

Дело в том, что App присуще только классам, а self - только функциям.

Переменная kv файла принимает только app:

'''
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 брала аргумент text из функции.

Помогите(


Ответы (1 шт):

Автор решения: RoKuflame

в файле kv нужно писать не self а root

вот код который я написал только что и все работает, если у вас не будет работать попробуйте обновить kivymd:

from kivy.uix.screenmanager import Screen

from kivymd.app import MDApp
from kivymd.uix.button import MDRectangleFlatButton, MDFlatButton

KV = '''
Screen:
    id: flat
    MDFlatButton:
        text: root.gg
        halign: "center"
'''
class MainApp(MDApp):
    def build(self):
        gg = '123'
        screen = Screen()
        screen.add_widget(MDFlatButton())
        return screen


MainApp().run()

и вот только на python:

from kivy.uix.screenmanager import Screen

from kivymd.app import MDApp
from kivymd.uix.button import MDRectangleFlatButton, MDFlatButton

class MainApp(MDApp):
    def build(self):
        flat = '123'
        screen = Screen()
        screen.add_widget(MDFlatButton(text= flat))
        return screen


MainApp().run()

введите сюда описание изображения

→ Ссылка