我正在尝试使用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()
我知道这是一个愚蠢的问题,但我无法弄清楚如何解决它。 请帮忙
答案 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只是为了更新,但对于你的用例,上面的代码更简单