Kivy:返回动画gif然后再调用另一个def

时间:2017-03-22 14:47:08

标签: python kivy animated-gif

单击按钮后,应用程序应显示非常繁重的表格,因此我希望首先显示动画gif,然后显示表格。

单击该按钮时,将调用第一个def:

wait_image= Loading()
self.add_widget(wait_image)
Clock.schedule_once(lambda x: self.DisplayTable(self), 0)

但这只会加载动画gif的第一帧。如果我将Clock.schedule替换为return self,那么动画gif会起作用,但DisplayTable def不会被调用:

wait_image= Loading()
self.add_widget(wait_image)
return self

我试图调用另一个将返回self的def,然后继续DisplayTable,但这也不起作用(.gif不动画但显示表格):

Loading_image(self)
Clock.schedule_once(lambda x: self.DisplayTable(self), 0)

with:

def Loading_image(self):
    wait_image= Loading()
    self.add_widget(wait_image)
    return self

那么我怎样才能通过简单的点击调用并显示动画gif,然后继续调用DisplayTable def?

以下是BuilderLoading类:

Builder.load_string('''
<Loading>
    source : 'loading.zip'
    anim_delay : 0.02
    allow_stretch : True
    keep_ratio : True
    keep_data : True
''')
class Loading(AsyncImage):
    pass

代码为here

1 个答案:

答案 0 :(得分:1)

您需要让事件循环时间来更新您的gif ...使用 kivyoav 可以简化:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="showHide"><a class="showHideLink" id="1" href="#">Enter Comments</a></p>
<p class="1 comments">Comments:<br><textarea cols="50" rows="3"></textarea></p>

另一种选择是在不同的线程中进行繁重的工作,稍后只使用 Clock.schedule_once

更新UI
from kivyoav.delayed import delayable

@delayable
def DisplayTable(self):
    for i in ROWS:
        yield 0.01 # after each row the gif will have time to update ... 
        for j in COLS:
            pass # build your table cols ...