我正在尝试制作一个简单的程序,该程序在for
循环的每次迭代中更新标签中的文本。我希望文本显示'0','1','2','3'和'4',但文本直接显示值'4'。如何使我的代码显示此过渡。
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
class loop(App):
def build(self):
b = BoxLayout()
btn = Button(text='start')
btn.bind(on_press = self.start)
b.add_widget(btn)
self.label = Label(text='0')
b.add_widget(self.label)
return b
def start(self,event):
for i in range(5):
self.label.text = str(i) #Change the text in every iteration
root = loop()
root.run()
答案 0 :(得分:1)
您不应该使用睡眠或在kivy中进行更新和小部件的时间或时间,而kivy为您提供在这种情况下非常有用的clock方法。 简单的clock方法可以让您在任何时候调用任何方法,这里有一个简单的示例,它每秒钟更新标签文本,但是您可以通过更改lock方法的第二个参数来更改它
from kivy.app import App
from kivy.clock import Clock
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.properties import NumericProperty
class loop(App):
# creating a NumericProperty with 1 as initial value
i = NumericProperty(1)
def build(self):
b = BoxLayout()
btn = Button(text='start')
btn.bind(on_press=self.start)
b.add_widget(btn)
self.label = Label(text='0')
b.add_widget(self.label)
return b
def start(self, *args):
# testing if i is smaller than 5 or any other require number
if self.i < 5:
self.label.text = str(self.i) # Change the text every time we call this method
# increasing the app NumericProperty i by one
self.i += 1
# using the clock method to call back the start method once after reaching this line with one second
Clock.schedule_once(self.start, 1)
root = loop()
root.run()