如何在for循环中更新标签小部件中的文本?

时间:2020-09-13 05:56:57

标签: python python-3.x kivy

我正在尝试制作一个简单的程序,该程序在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()

1 个答案:

答案 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()