Python Kivy进度条值更新,但进度条不更新

Python Kivy进度条值更新,但进度条不更新,python,kivy,kivy-language,Python,Kivy,Kivy Language,我的kivy应用程序中有一个ProgressBar。我相信我需要使用Clock.create_trigger来确保进度条从循环内部更新 我已经尝试从和为我的解决方案调整解决方案,但是,直到最后,该栏仍然没有更新 以下代码是用于再现性目的的淡化版本 ProgressBar类 from kivy.clock import Clock from kivy.uix.progressbar import ProgressBar class MyProgressBar(ProgressBar):

我的kivy应用程序中有一个ProgressBar。我相信我需要使用
Clock.create_trigger
来确保进度条从循环内部更新

我已经尝试从和为我的解决方案调整解决方案,但是,直到最后,该栏仍然没有更新

以下代码是用于再现性目的的淡化版本

ProgressBar类

from kivy.clock import Clock
from kivy.uix.progressbar import ProgressBar


class MyProgressBar(ProgressBar):
    def __init__(self, *args, **kwargs):
        super(MyProgressBar, self).__init__(*args, **kwargs)
        # self.update_bar_trigger = Clock.create_trigger(self.update_bar)
        self.update_bar_trigger = Clock.create_trigger(lambda dt: self.update_bar(), 1)

    def update_bar(self, step):
        if self.value <= 100:
            self.value += step
            self.update_bar_trigger()
KV文件

<Main_app>:
    loading_pb: load_pb

    GridLayout:
        rows: 2
        MyProgressBar:
            id: load_pb
            value: 0
            min: 0
            max: 100

        Button:
            text: 'Start Progress Bar'
            on_press:
                root.dummy()
问题 进度条的值似乎确实如预期的那样递增,但实际的进度条直到循环结束时才一次发生变化

相关的

这段代码会阻塞gui,直到它返回,因此正常的gui绘图都不会发生。相反,使用
Clock.schedule\u interval
和/或
Clock.schedule\u一次
来安排循环的每个迭代。它们将函数调用插入kivy自己的eventloop,并避免阻塞该循环

<Main_app>:
    loading_pb: load_pb

    GridLayout:
        rows: 2
        MyProgressBar:
            id: load_pb
            value: 0
            min: 0
            max: 100

        Button:
            text: 'Start Progress Bar'
            on_press:
                root.dummy()
10.0
20.0
30.0
40.0
50.0
60.0
70.0
80.0
90.0
100.0
    for i in range(10):
        time.sleep(2)
        self.loading_pb.update_bar(pb_increment)
        print(self.loading_pb.value)