Python Kivy: Как заставить Switch работать с каруселью - PullRequest
0 голосов
/ 17 апреля 2019

Я получаю:

AttributeError: у объекта 'Carousel' нет атрибута 'switch_on'

ошибка всякий раз, когда я пытаюсь нажать на кнопку

------- main.py ----------

class main(App):
    def build(self):



        class SampBoxLayout(BoxLayout):


            # For Switch
            def switch_on(self, instance, value):
                if value is True:
                    print("Switch On")
                else:
                    print("Switch Off")



        return Carousel()



sample_app = kv_main()
sample_app.run()

---------- main.kv --------------

:

Label:
    text: "Page 1"
    size_hint: 1, .1
    width :100

    SampBoxLayout:


        # ----------Switch ----------
        BoxLayout:

            BoxLayout:
                orientation: "horizontal"
                size_hint_x: .25
                CustLabel:
                    text: "On / Off"

                    Switch:
                        id: switch_id
                        on_active: root.switch_on(self, self.active)# <--need help on this


Label:
    text: "Page 2"
    size_hint: 1, .1
    width :100

    Button:
        text: "Button 2.1"
        size_hint: None, None
        width :100



Label:
    text: "Page 3"
    size_hint: 1, .1
    width :100

    Button:
        text: "Button 3.1"
        size_hint: None, None
        width :100

1 Ответ

0 голосов
/ 17 апреля 2019

Вы используете root.switch_on. Как показывает ошибка, ваш корневой класс - это карусель. Поскольку SampBoxLayout не является пользователем root, вы должны дать SampBoxLayout идентификатор и вызвать его с идентификатором.
Отредактировано из вашего примера:

SampBoxLayout:
    id: samp
    BoxLayout:

        BoxLayout:
            orientation: "horizontal"
            size_hint_x: .25
            CustLabel:
                text: "On / Off"

                Switch:
                    id: switch_id
                    on_active: samp.switch_on(self, self.active)

Я не знаю, сделали ли вы что-то не так при публикации или ваш код действительно выглядит так. Но вы не должны определять классы внутри вашего класса приложения. Держите классы на верхнем уровне, чтобы получить к ним доступ в кв.
И ваш код кв необычен. У вас есть ваши виджеты в ярлыке.

...