KIVY - изменить вещи дважды одним нажатием кнопки - PullRequest
0 голосов
/ 31 августа 2018

интересно, может ли кто-нибудь мне помочь.

Я застрял с проблемой. Я хочу изменить кнопку background_normal ДВАЖДЫ, нажав другую кнопку.

Так, например, сначала измените на желтый, затем подождите 2 секунды (time.sleep (2)), а затем измените на красный.

Я пытался сделать простые функции, которые делают это. Но проблема в том, что он не обновляет первое изменение background_normal. Отображает только последние изменения.

Пытался разделить его на две функции, одна меняет его на первый цвет, другая меняет его на второй цвет. Но все равно он не отображает ничего, кроме последних изменений.

Есть ли возможность решить эту проблему?

Обновление: Мой код ~ 2k строк, поэтому я опубликую краткую форму моей проблемы

class Game(FloatLayout):
    def firstaction(self):
        #change button1 to yellow and wait 2 seconds
    def secondaction(self):
        #change button1 to red


class GameApp(App):
     def build(self):
        return Game

kv файл выглядит как

button2:
    on_press: Game.firstaction
    on_press: Game.secondaction

1 Ответ

0 голосов
/ 31 августа 2018

Вы говорите о цветах, поэтому вы должны использовать background_color вместо background_normal. Переходя к проблеме, причина - time.sleep(), поскольку она блокирует цикл событий, цикл событий помогает обновлять графический интерфейс из-за событий ОС или пользователей. Решение заключается в использовании Clock.

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


class MyButton(Button):
    def on_press(self):
        self.background_color = (1,1,0,1)
        fn = lambda dt: setattr(self, "background_color", (1,0,0,1))
        Clock.schedule_once(fn, 2) # <--- 2 seconds


class MyApp(App):
    def build(self):
        button = MyButton(text='Hello World')
        return button

if __name__ == '__main__':
    MyApp().run()
...