猕猴桃-一键更改两次

时间:2018-08-31 20:25:50

标签: python button kivy

想知道是否有人可以帮助我。

我遇到了问题。我想通过单击另一个按钮来更改按钮background_normal TWICE。

因此,例如,先将其更改为黄色,然后再等待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 :(得分:0)

您谈论颜色,因此您应该使用background_color而不是background_normal。解决问题的原因是time.sleep(),因为它阻止了事件循环,事件循环帮助GUI由于操作系统或用户事件而更新。解决方案是使用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()