想知道是否有人可以帮助我。
我遇到了问题。我想通过单击另一个按钮来更改按钮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
答案 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()