Как отправить и использовать идентификатор виджета из KIVY в Python - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь отключить кнопки по идентификатору. Как я узнал, отправка идентификатора (понг) не работает. Тем не менее, для моего окончательного приложения мне все равно нужно отправлять буквы A, B, ... F, так что я могу в любом случае создать строку идентификатора виджета и использовать ее для ее отключения? я должен преобразовать строку в другой тип данных? мой .py

# main.py
from kivy.app import App
from kivy.uix.gridlayout import GridLayout


class TurboWidget(GridLayout):
    def ping(self, y):
        x = "btnStart"+y
        print(y)
        print(x)
        self.ids.x.disabled = True

    def pong(self, y):
        print(y)
        self.ids.y.disabled = True


class TurboApp(App):
    def build(self):
        return TurboWidget()


if __name__ == "__main__":
    TurboApp().run()

мой .кв

# turbo.kv
<TurboWidget>
    cols: 2
    Button:
        id: btnStartA
        text:"A"
        on_release: root.Ping("A")

    Button:
        id: btnStartB
        text:"B"
        on_release: root.Ping("B")

    Button:
        id: btnStartC
        text:"C"
        on_release: root.Pong(btnStartC.id)
    Button:
        id: btnStartD
        text:"D"
        on_release: root.Pong(btnStartD.id)

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вы можете сделать это, используя следующий метод. Обратите внимание, что я передаю идентификаторы в виде строк внутри метода. Кроме того, я использую self.ids[y].disabled для установки атрибута kivy со стороны Python.

# main.py
from kivy.app import App
from kivy.uix.gridlayout import GridLayout

class TurboWidget(GridLayout):
    def ping(self, y):
        self.ids[y].disabled = True

    def pong(self, y):
        print(y)
        self.ids[y].disabled = True


class TurboApp(App):
    def build(self):
        return TurboWidget()


if __name__ == "__main__":
    TurboApp().run()

и используя следующий файл kv в той же папке, что и main.py.

# turbo.kv
<TurboWidget>
    cols: 2
    Button:
        id: btnStartA
        text:"A"
        on_press: root.ping("btnStartA")

    Button:
        id: btnStartB
        text:"B"
        on_press: root.ping("btnStartB")

    Button:
        id: btnStartC
        text:"C"
        on_press: root.pong("btnStartC")

    Button:
        id: btnStartD
        text:"D"
        on_press: root.pong("btnStartD")
0 голосов
/ 06 сентября 2018
self.ids.x.disabled= True

должно быть

self.ids[x].disabled= True

БЕЗ точки.

https://kivy.org/doc/stable/guide/lang.html#accessing-widgets-defined-inside-kv-lang-in-your-python-code

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...