Атрибут есть, а при запуске говорит что его нет
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty
from kivy.core.window import Window
Window.size = (1000, 1000)
Window.clearcolor = (65/255, 106/255, 72/255, 1)
Window.title = "ЕГЭ физика"
class k(App):
def _init_(self):
super()._init_()
self.label=Label(text = 'физика')
self.Ft=Label(text='сила тяжести (Н))
self.input_data2=TextInput(hint_text='высота (м)',multiline=False)
self.input_data1=TextInput(hint_text='масса (Кг)',multiline=False)
self.input_data1.bind(text=self.on_text)
self.input_data2.bind(text=self.on_text)
def on_text(self, *args):
data1 = self.input_data1.text
data2 = self.input_data2.text
if data1.isnumeric() and data2.isnumeric():
self.Ft.text = 'сила тяжести (H): ' +
str(float(data1) * float(data2) * 10)
else:
self.Ft.text = 'сила тяжести (H):'
def build(self):
box = BoxLayout(orientation='vertical')
box.add_widget(self.label)
box.add_widget(self.input_data1)
box.add_widget(self.input_data2)
box.add_widget(self.Ft)
return box
if __name__ == "__main__":
k().run()
#Сообщение = 'k' object has no attribute 'label'
# Источник = C:\Users\source\repos\физика\физика.py
# Трассировка стека:
# File "C:\Users\source\repos\физика\физика.py", line
#33, in build
#box.add_widget(self.label)
# File "C:\Users\source\repos\физика\физика.py", ##
#line
#40, in <module>
#k().run()
Это код, вроде бы все нормально, но он не запускается, выдавая "has no attribute".
Питон 3.7, киви 2.3.0
Ожидал создания окна с двумя интерактивными переменными.
Попробовал проще код, запускается.
В общем и целом ошибка может заключаться не в коде.
Ответы (1 шт):
Автор решения: Smeto
→ Ссылка
__init__
. В Python метод инициализации класса должен называться __init__
(с двумя подчеркиваниями в начале и в конце), а у тебя написано _init_
(с одним подчеркиванием). Это приводит к тому, что метод инициализации не вызывается, и атрибуты класса не создаются.
Также в твоем коде есть другие ошибки, такие как пропущенные кавычки и неправильные отступы.
Проверяй.
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
# Настройки окна
Window.size = (1000, 1000)
Window.clearcolor = (65 / 255, 106 / 255, 72 / 255, 1)
Window.title = "ЕГЭ физика"
class MyApp(App):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.label = Label(text='Физика')
self.Ft = Label(text='Сила тяжести (Н):')
self.input_data1 = TextInput(hint_text='Масса (кг)', multiline=False)
self.input_data2 = TextInput(hint_text='Высота (м)', multiline=False)
self.input_data1.bind(text=self.on_text)
self.input_data2.bind(text=self.on_text)
def on_text(self, instance, value):
data1 = self.input_data1.text
data2 = self.input_data2.text
if data1.isnumeric() and data2.isnumeric():
self.Ft.text = 'Сила тяжести (Н): ' + str(float(data1) * float(data2) * 10
else:
self.Ft.text = 'Сила тяжести (Н):'
def build(self):
box = BoxLayout(orientation='vertical')
box.add_widget(self.label)
box.add_widget(self.input_data1)
box.add_widget(self.input_data2)
box.add_widget(self.Ft)
return box
if __name__ == "__main__":
MyApp().run()