[英]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.