Kivy - Как установить продолжительность для кода? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть:

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 Ответ

0 голосов
/ 22 сентября 2018
  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

Выход

Img01 Img02

...