我试图制作一个更新标签的计时器,以查看当前剩余的时间。我有一个按钮,按下时应启动2分钟计时器。由于某种原因,标签没有更新。我这样做的方式有问题吗?
这是我的代码:
import time
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
Builder.load_string("""
#:import sla kivy.adapters.simplelistadapter
#:import label kivy.uix.label
<ListItemButton>:
selected_color: 0, 0, 1, 1
deselected_color: 0, 0, 0, 1
<MenuScreen>:
FloatLayout:
#cols: 2
#rows: 2
size: 800,480
Label:
id: output
text: "0 min 0 s"
font_size: 60
size_hint: None, None
size: 400, 100
pos: 200,425
Button:
id: statheader
text: "2 min"
font_size: 40
size_hint: None, None
size: 600,100
pos: 150,800
background_color: 0,0,1,1
on_press: root.startTimer(int(2))
""")
class MenuScreen(Screen):
tww = 0
def startTimer(self, what):
self.tww = what*60
while self.tww > 0:
minute = self.tww/60
print(minute)
second = self.tww - minute*60
print(second)
self.ids.output.text = str(minute) + " min " + str(second) + " s"
self.tww -= 1
time.sleep(1)
sm = ScreenManager()
menu_screen = MenuScreen(name='menu')
sm.add_widget(menu_screen)
class TestApp(App):
def build(self):
return sm
if __name__ == '__main__':
TestApp().run()
还有其他self.ids.output.text
应该是什么吗?
答案 0 :(得分:1)
Kivy的图形无法更新,直到你的while循环结束 - 在循环过程中,只有循环内容被重复运行,并且Kivy的正常功能被阻止。
您应该使用Clock.schedule_interval
每帧运行计算而不阻塞其他函数,或者在线程中运行while循环。