繁体   English   中英

猕猴桃-一键更改两次

[英]kivy - change things twice with one button click

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

我陷入了一个问题。 我想通过单击另一个按钮来更改按钮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

您谈论颜色,因此您应该使用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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM