2017-03-22 33 views
0

ボタンをクリックすると、アプリは非常に重いテーブルを表示するので、最初にアニメーションgifを表示してからテーブルを表示します。Kivy:アニメーションGIFを返してから別のdefを呼び出す

ボタンをクリックすると、最初のDEFがこれを使って呼び出される:

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

しかし、これが唯一のアニメーションgifの最初のフレームをロードします。

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

私は自己を返します別のDEFを呼び出し、その後、DisplayTable目を続行しようとしたが、これはまた、doesnの:私はClock.schedulereturn selfで置き換える場合は、アニメーションGIFの作品が、DisplayTable DEFが呼び出されません「トンの仕事(.GIFがアニメーションではなく、テーブルが表示されます):

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

と:

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

どうすれば簡単なクリックで、アニメーションgifを呼び出して表示し、次にDisplayTableを呼び出すことができますか?ここで


BuilderあるとLoadingクラス:

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

コードがkivyoavを使用して...あなたのGIFを更新するためのイベントループの時間を聞かせする必要がhere

答えて

0

ですそれは簡単です:

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 ... 

もう一つの選択肢は、別のスレッドで重い物を持ち上げるを行うだけClock.schedule_once

def build_table(): 
    ... 
    #stuff that take time 
    stuff = ... 
    ... 
    Clock.schedule_once(lambda dt: build_ui_table(stuff)) #since you can use the UI only from the main thread 
threading.Thread(target=build_table).start() 
+0

おかげヨアフを使用して、後にUIを更新することです。私はあなたのプラグインでアニメーションGIFを手に入れることができましたが、それはスムーズに実行されていません。テーブルの作成には約15秒かかります.GIFは約2秒間アニメーションされ、その後約8秒間停止してから2秒間ゆっくりと移動し、最後の3秒間別の時間が経過します。 15秒間に、私のコードは、それぞれ複数のスクロール可能なラベルを含む多くの行を持つBoxLayoutを構築しています。 BoxLayout全体がスクロール可能です。その後、BoxLayoutを一度にアプリケーションに追加するので、.gifがほとんどの時間を過ごす理由はわかりません。 – Enora

+0

私はコードなしで手助けするのが難しいでしょう、より多くの場所に**収率**を入れようとしましたか? –

+0

はい、これは優れていますが、現在は.gifが戻ってくることが多く、多くの利回りが実際にプログラムを遅くしています(15秒前と比較して3分以上)。私はコードをhttps://github.com/EnoraNedelec/FoldersManagerに置く。関連する部分はFoldersManager.pyの '## 3'' ## 5'と '#anim_gif'です – Enora

関連する問題