Kivy倒计时标签

时间:2016-06-05 19:17:11

标签: python-3.x kivy

我正在尝试使用Label进行倒计时。

通过更新标签的文字,我相信这是可能的。

我的目的是在用户按下开始按钮

后开始倒计时

但它无法正常工作!!!

这是我的代码

from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.app import App
import time


class WelcomeScreen(Widget):
    def __init__(self):
        super().__init__()
        self.start = Button(text="Start Game", pos=(350, 250))
        self.add_widget(self.start)
        self.count = Label(text="", pos=(350, 250),font_size=90)
        self.start.bind(on_press=self.start_game)

    def start_game(self, obj):
        num = 0
        self.remove_widget(self.start)
        self.add_widget(self.count)
        for i in range(1, 4):
            num += 1
            self.count.text = str(num)
            time.sleep(1)



class TestApp(App):
    def build(self):
        return WelcomeScreen()

TestApp().run()

我知道这是一个愚蠢的问题,但我无法弄清楚如何解决它。 请帮忙

1 个答案:

答案 0 :(得分:0)

短吻合:使用时钟

def start_game(self, obj):
    num = 0
    self.remove_widget(self.start)
    self.add_widget(self.count)
    def count_it(num):
        if num == 4: 
            return
        num += 1
        self.count.text = str(num)
        Clock.schedule_once(lambda dt: count_it(num), 1)

    Clock.schedule_once(lambda dt: count_it(0), 0)

长: 当您运行python代码时,kivy事件循环正在等待,因此当您执行time.sleep时停止进程时,屏幕上没有任何内容更新...

Clock schedule_ *方法允许您设置回调,同时让您在闲置时运行事件循环

你也可以使用一个线程并调用Clock.schedule_once只是为了更新,但对于你的用例,上面的代码更简单