Атрибут есть, а при запуске говорит что его нет

Рейтинг: 0Ответов: 1Опубликовано: 17.02.2025
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

Ожидал создания окна с двумя интерактивными переменными.
Попробовал проще код, запускается.
В общем и целом ошибка может заключаться не в коде.

Ответы

▲ 3

__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()