Изменение свойства класса Kivy в файле KV - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу изменить свойство кнопки переключения, которая находится в нескольких местах.Когда я запускаю код, я получаю AttributeError: 'super' object has no attribute '__getattr__'.Нужно ли создавать кнопку в файле python для того, чтобы это работало?

from kivy.app import App
from kivy.lang import Builder

KV = Builder.load_string("""

ScreenManager:
    Screen:
        name: 'screen'
        GridLayout:
            cols:1
            rows:3

            TButton:
            TButton:

            Button:
                text:
                    'Reset button'
                on_release:
                    app.root.get_screen('screen').ids.toggle_buttons.state = 'normal'

<TButton@ToggleButton>:
    id: toggle_buttons
    allow_no_selection: True
    text: 'Toggle Button'

""")

class MyApp(App):
    def build(self):
        return KV

if __name__ == '__main__':
    MyApp().run()

Когда я нажимаю 'кнопку сброса', кнопки TBTton должны сбросить state на 'normal'.

1 Ответ

0 голосов
/ 21 декабря 2018

Сначала вы должны понять, что идентификатор должен иметь локальную область видимости, и вы не должны использовать его вне его.Таким образом, идентификатор toggle_buttons должен использоваться только в реализации TButton.

С вашей логикой, скажем, вы хотите сбросить только одну кнопку через этот идентификатор, как мне идентифицировать эту кнопку, если они имеют одинаковый идентификатор?как мы видим, это невозможно.

Решение состоит в том, чтобы реализовать свойство, которое хранит идентификаторы кнопок и выполняет итерации, устанавливая свойство.

ScreenManager:
    buttons: [btn1, btn2] # <---
    Screen:
        name: 'screen'
        GridLayout:
            cols:1
            rows:3
            TButton:
                id: btn1
            TButton:
                id: btn2
            Button:
                text:
                    'Reset button'
                on_release: for btn in root.buttons: btn.state = 'normal'

<TButton@ToggleButton>:
    id: toggle_buttons
    allow_no_selection: True
    text: 'Toggle Button'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...