Kivy:使用进度条模拟一个进程,然后执行其他代码

问题描述 投票:0回答:1

我正在尝试使用 Kivy 中的进度条来模拟外部进程的完成,在该进程结束时应该运行一个函数来提供一些结果。

我查看了这里讨论进度条和时钟计划事件的所有帖子。方法都试过了,还是达不到我想要的效果

在我的主小部件类中,我定义了以下方法:

def update_progbar(self):
    print(self.progbar.value)
    self.progbar.value += 10.0
def start_progbar_update(self):
    print("start progbar update")
    self.update_progbar_event = Clock.schedule_interval(lambda dt: self.update_progbar(),1)
def stop_progbar_update(self):
    print("stop progbar update")
    self.update_progbar_event.cancel()
def run_program(self):
    if self.progbar.value < 100.0:
       self.start_progbar_update()
    elif self.progbar.value >= 100.0:
       self.stop_progbar_update()

#wait for progress bar to fill up, then execute code below
    results = some_function(args)

所以,效果就是向用户展示一个模拟的过程,需要一些时间,然后产生一些结果。

进度条更新的启动正在工作。我看到进度条小部件每秒填充 10%。但达到 100% 后,它继续运行并不断打印“100.0”并且永远不会退出。

我似乎无法让条件

if progbar.value >= 100.0: stop_progbar_update()
发挥作用。时钟计划间隔事件永远不会被取消。

下面的代码永远没有机会运行。

python kivy
1个回答
0
投票

您需要在

update_progbar()
方法中添加代码来检查结束条件。比如:

def update_progbar(self):
    print(self.progbar.value)
    self.progbar.value += 10.0
    if self.progbar.value >= 100.0:
        self.stop_progbar_update()
        print('run some program')

我怀疑您的

run_program()
方法仅在
App
开始时调用一次,因此代码:

elif self.progbar.value >= 100.0:

永远不会运行。

© www.soinside.com 2019 - 2024. All rights reserved.