Не импортируются виджеты из Kivy MD

Вот код простого приложения:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout

from kivymd.app import MDApp
from kivymd.theming import ThemeManager



Builder.load_string =('''


<Cont>:
    rows: 2

    c: C
    c1: C1
    c2: C2
    m1: M1
    m2: M2

    BoxLayout:
        orientation: 'vertical'
        padding: [70]
        spacing: 100

        MDTextField:
            id: C
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        MDTextField:
            id: C1
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        MDTextField:
            id: C2
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        MDTextField:
            id: M1
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        MDTextField:
            id: M2
            size_hint: (1, .1)
            font_size: (100)
            multiline: False



    BoxLayout:
        size_hint: (1,.2)
        padding: [40,0,40,20]

        MDIconButton:
            text: 'test'
            on_press: root.cal()

''')

def get(c1,c2,m1,m2,c):

    if c == '?':
        c = 1
    if c1 == '?':
        c1 = 1
    if c2 == '?':
        c2 = 1
    if m1 == '?':
        m1 = 1
    if m2 == '?':
        m2 = 1




    c1 = float(c1)
    c2 = float(c2)
    m1 = float(m1)
    m2 = float(m2)
    c = float(c)

    Ans_C = str((c1*m1+c2*m2)/(m1+m2))
    Ans_C1 = str((c*m1+c*m2-c2*m2)/(m1))
    Ans_C2 = str((c*m1+c*m2-c1*m1)/(m2))
    Ans_M1 = str((c2*m2-c*m2)/(c-c1))
    Ans_M2 = str((c1*m1-c*m1)/(c-c2))



    return {
    'C': Ans_C,
    'C1': Ans_C1,
    'C2': Ans_C2,
    'M1': Ans_M1,
    'M2': Ans_M2
    }



class Cont(GridLayout):

    def cal(self):



        i1 = self.c1.text
        i2 = self.c2.text
        i3 = self.m1.text
        i4 = self.m2.text
        i5 = self.c.text

        gett = get(i1,i2,i3,i4,i5)


        if self.c.text == '?':
            self.c.text = gett.get('C')
        if self.c1.text == '?':
            self.c1.text = gett.get('C1')
        if self.c2.text == '?':
            self.c2.text = gett.get('C2')
        if self.m1.text == '?':
            self.m1.text = gett.get('M1')
        if self.m2.text == '?':
            self.m2.text = gett.get('M2')




class App(App):
    theme_cls = ThemeManager()
    title = 'Test'

    def build(self):
        self.theme_cls.theme_style = 'Dark'


        return Cont()

if __name__ == "__main__":
    App().run()

И почему-то приложение выдаёт при запуске пустой экран: введите сюда описание изображения Много искал и перечитывал документацию, но ответа не нашёл, где у меня ошибка?

При этом ThemeManager в kivy MD работает и скорее всего проблема в виджитах, которые не работают в моём коде.


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

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

Вы пользуетесь устаревшим API и,видимо, устаревшей библиотекой KivyMD - https://kivymd.readthedocs.io/en/0.104.0/getting-started.html#first-kivymd-application

→ Ссылка
Автор решения: palamiko

Как то так:

from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
from kivy.uix.textinput import TextInput
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout

from kivymd.app import MDApp
from kivymd.theming import ThemeManager

KV = '''
<Cont>:
    rows: 2

    c: C
    c1: C1
    c2: C2
    m1: M1
    m2: M2

    BoxLayout:
        orientation: 'vertical'
        padding: [70]
        spacing: 100

        MDTextField:
            id: C
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        MDTextField:
            id: C1
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        MDTextField:
            id: C2
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        MDTextField:
            id: M1
            size_hint: (1, .1)
            font_size: (100)
            multiline: False
        MDTextField:
            id: M2
            size_hint: (1, .1)
            font_size: (100)
            multiline: False

    BoxLayout:
        orientation: 'vertical'
        padding: 70
        spacing: 100




    BoxLayout:
        size_hint: (1,.2)
        padding: [40,0,40,20]

        MDIconButton:
            text: 'test'
            on_press: root.cal()

Screen:
    Cont:

'''


class Cont(GridLayout):

    def get(c1, c2, m1, m2, c):

        if c == '?':
            c = 1
        if c1 == '?':
            c1 = 1
        if c2 == '?':
            c2 = 1
        if m1 == '?':
            m1 = 1
        if m2 == '?':
            m2 = 1

        c1 = float(c1)
        c2 = float(c2)
        m1 = float(m1)
        m2 = float(m2)
        c = float(c)

        Ans_C = str((c1 * m1 + c2 * m2) / (m1 + m2))
        Ans_C1 = str((c * m1 + c * m2 - c2 * m2) / (m1))
        Ans_C2 = str((c * m1 + c * m2 - c1 * m1) / (m2))
        Ans_M1 = str((c2 * m2 - c * m2) / (c - c1))
        Ans_M2 = str((c1 * m1 - c * m1) / (c - c2))

        return {
            'C': Ans_C,
            'C1': Ans_C1,
            'C2': Ans_C2,
            'M1': Ans_M1,
            'M2': Ans_M2
        }

    def cal(self):

        i1 = self.c1.text
        i2 = self.c2.text
        i3 = self.m1.text
        i4 = self.m2.text
        i5 = self.c.text

        gett = get(i1, i2, i3, i4, i5)


        if self.c.text == '?':
            self.c.text = gett.get('C')
        if self.c1.text == '?':
            self.c1.text = gett.get('C1')
        if self.c2.text == '?':
            self.c2.text = gett.get('C2')
        if self.m1.text == '?':
            self.m1.text = gett.get('M1')
        if self.m2.text == '?':
            self.m2.text = gett.get('M2')


class App(MDApp):

    def __init__(self, **kwargs):
        self.theme_cls.theme_style = 'Dark'
        super().__init__(**kwargs)

    def build(self):
        return Builder.load_string(KV)

if __name__ == "__main__":
    App().run()
→ Ссылка