Kivy:设置标签文本,然后在一秒钟后更改它

时间:2016-02-14 11:57:22

标签: python kivy

我做了一个硬币翻转按钮,在Label中显示结果,每次按下按钮,结果都会根据功能而改变。

def coin_flip(self):
    sound_1 = SoundLoader.load('coin.wav')
    res = random.randint(1,2)
    if sound_1:
        sound_1.play()
    if res == 1:
        self.coin_f_result.text = "HEAD"
    else:
        self.coin_f_result.text = "TAIL"

我想要做的是,在Label中显示结果,然后在第二次将Label文本设置为" &#34 ;.这是我尝试过的,但我只是将函数调用延迟,标签文本直接设置为" "

def coin_flip(self):
    sound_1 = SoundLoader.load('dice.wav')
    res = random.randint(1,2)
    if sound_1:
        sound_1.play()
    if res == 1:
        self.coin_f_result.text = "HEAD"
        time.sleep(1)
        self.coin_f_result.text = " "
    else:
        self.coin_f_result.text = "TAIL"
        time.sleep(1)
        self.coin_f_result.text = " "

1 个答案:

答案 0 :(得分:4)

切勿在事件驱动的框架(例如kivy)中使用time.sleep()。它只是阻止执行,如您所见,事件不会被处理。请改用Clock.schedule_once()。例如,在具有coin_flip方法的同一个类中,定义

def reset_label(self, *args):
    self.coin_f_result.text = ' '

coin_flip()写完

Clock.schedule_once(self.reset_label, 1)

对于平滑过渡,您也可以将其与Animation配对。