Не импортируются виджеты из 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()