Kivy - Как определить, нажата ли кнопка? - PullRequest
0 голосов
/ 31 января 2019

Хорошо, у меня есть приложение, в котором при нажатии кнопки появляется всплывающее окно.Во всплывающем окне вы можете запланировать событие.Когда вы нажимаете кнопку «Расписание», на данный момент я бы хотел, чтобы она распечатала на терминале, что она была нажата.Я пытаюсь определить функцию в python и связать ее с моим идентификатором в моем файле kv для записи нажатия кнопки, но, похоже, она не работает.Помогите?Может быть, очевидный ответ, но я все еще учусь LOL

Python

  def schedule_event(self, *args):
      if self.root.ids['set_event']:
          print('Working')

KV File

<ButtonPopup@Popup>:
    title: 'Set Events'
    title_align: 'center'
    auto_dismiss: False
    size_hint: None, None
    size: 400, 200

    GridLayout:
        cols: 1
        TextInput:
            id: scheduled_event
            hint_text: "Something scheduled for this day..."

        BoxLayout:

            Button:
                id: set_event
                text: "Schedule"
                on_press: app.root.schedule_event()
                on_release: root.dismiss()

            Button:
                id: cancel
                text: "Cancel"
                on_release: root.dismiss()

1 Ответ

0 голосов
/ 31 января 2019

KeyError означает, что в вашем App корневом классе ids нет set_event, чего и следовало ожидать.В вашем файле .py добавьте:

class ButtonPopup(Popup):
    def schedule_event(self, *args):
        if 'set_event` in self.ids:
            print('Working')
        else:
            print('Missing set_event')

Затем в файле .kv замените <ButtonPopup@Popup>: на <ButtonPopup>:. Этот метод переводит ваш метод в класс ButtonPopup, где он может легко получить доступ кids этого класса.Кроме того, в вашем файле .kv измените on_press: app.root.schedule_event() на on_press: root.schedule_event()

id, который вы указали в файле .kv, будет в классе ButtonPopup, а не в App.См. документацию .

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