Python Kivy, возвращающий 'AttributeError:' super 'объект не имеет атрибута' __getattr__ '' - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь создать интерактивное школьное расписание с использованием Kivy, но у меня постоянно возникают проблемы с изменением текста кнопки на основе ее названия. Я создал сетку, в которой каждая кнопка имеет уникальное имя, например, первая кнопка в понедельник - one_mon, следующая - two_mon и так далее. Я создал класс, который наследуется от Button, и вот код Kivy и Python для этого класса:

<Tile>:
    background_color: [.5, .9, 1, 1]
    halign: "center"
    size_hint: None, None
    size: 96, 96
    text: self.lesson
    on_press: self.on_press()
    on_release: self.on_release()

Вот код Python для плитки


class Tile(Button):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.lesson = ""
        self.sub_press = ""
        self.check()
        self.text = self.lesson

    def check(self):
        if self.ids.one_mon == "one_mon":
            self.text = "English"
            self.sub_press = "Room nr. 42 \n Mr. Hetman"

        ...        

        else:
            self.lesson = "None"
            self.sub_press = "None"

    def on_release(self):
        self.text = self.lesson
        self.background_color = [.5, .9, 1, 1]

    def on_press(self):
        self.text = self.sub_press
        self.background_color = [.01, .9, 1, 1]

Вот сообщение об ошибке if self.ids.one_mon.name == "one_mon": File "kivy\properties.pyx", line 863, in kivy.properties.ObservableDict.__getattr__ AttributeError: 'super' object has no attribute '__getattr__'

Вот код для родительского виджета, объединяющего все эти кнопки:

<PlanChart>:
    cols: 11
    padding: 2
    Tile:
        id: one_mon
        name: "one_mon"
    Tile:
        id: two_mon
        name: "two_mon"
    Tile:
        id: three_mon
        name: "three_mon"

    ......

    Tile:
        id: ten_fri
        name: "ten_fri"

Почему я получаю эту ошибку? Есть ли другой способ проверить идентификатор кнопки? Может быть, мне следует полностью отказаться от этого проекта и начать заново, используя различные тактики c? Любая помощь приветствуется

1 Ответ

0 голосов
/ 04 апреля 2020

Проблема может быть в том, как вы наследуете от класса Button и как вы связали свойства с кнопкой

, вам следует наследовать от класса кнопки и переопределить on_release method

после того, как метод переопределен, слово self.text будет упоминаться как текущий текст кнопки

from kivy.properties import ObjectProperty

class Tile(Button):

    def __init__(self, **kwargs):
        super(Tile, self).__init__(**kwargs)
        self.lesson = ""

    def on_release(self):
        self.text = self.lesson
...