Kivy - 如何设置一段代码的持续时间?

Kivy - How to set duration for a piece of code?

我有:

Button:
    text: "SEQUENCE 2"
    size_hint: None, .16
    width: 225
    on_press:
        self.background_color = (1.7, 0, 1.7, 1)

我希望 'self.background_color' 在 'on_press'.

一定秒数后切换回正常状态(按下前的状态)

我该怎么做?

编辑(在 .kv StackLayout 中是所需的位置。)

<ContScreen>:
    StackLayout
        orientation: "tb-rl"
        spacing: 15

        Button:
            text: "SEQUENCE 1"
            size_hint: None, .16
            width: 225

        Button:
            text: "SEQUENCE 2"
            size_hint: None, .16
            width: 225

如果无法集成到 .kv StackLayout 中,我如何重新格式化它以基于“<>”方法工作。

  1. 使用Clock.create_trigger()创建触发事件。
  2. 当持续时间到期或达到时,将按钮的 background_color 重置为默认颜色 [1, 1, 1, 1]

示例

main.py

from kivy.app import App
from kivy.uix.button import Button
from kivy.clock import Clock


class ButtonBackgroundColourDemo(Button):

    def on_press(self):
        print("\non_press")
        self.duration = 5
        self.background_color_event = Clock.create_trigger(self.set_background_colour, 1)
        self.background_color = (1.7, 0, 1.7, 1)
        self.background_color_event()

    def set_background_colour(self, dt):
        print("\tdt=", dt)
        self.duration -= 1
        if self.duration <= 0:
            self.background_color = [1, 1, 1, 1]    # reset to default colour
        else:
            self.background_color_event()


class Test(App):

    def build(self):
        return ButtonBackgroundColourDemo()


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

test.kv

#:kivy 1.11.0

<ButtonBackgroundColourDemo>:
    text: "SEQUENCE 2"
    size_hint: None, .16
    width: 225

输出