Kivy-如何检测按钮是否被按下?

时间:2019-01-30 21:59:44

标签: python kivy

好的,我有一个应用程序,当您单击一个按钮时,会弹出一个窗口。在弹出窗口中,您可以安排事件。现在,当您单击“计划”按钮时,我希望它可以打印到已单击的终端。我试图在python中定义一个函数,并将其与我的id连接到我的kv文件中,以便记录按钮按下的操作,但它似乎无法正常工作。救命?可能是一个明显的答案,但我仍在学习大声笑

Python

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

Kv文件

<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 :(得分:0)

KeyError意味着set_event根类App中没有ids,这是可以预期的。在您的.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中。参见documentation