我正在尝试使用 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()
发挥作用。时钟计划间隔事件永远不会被取消。
下面的代码永远没有机会运行。
您需要在
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:
永远不会运行。