私は、forループを繰り返して一連のオブジェクトを順番にアニメーション化したいという状況に遭遇したアプリケーションを書いています。Kivyでは、一連のウィジェットをループでアニメーションできますか?
私は、アプリケーションを実行し、ボタンをクリックすると、最初のラベルのテキストを縮小し、1.5秒のポーズを待つ、2番目のラベルを縮小する、待つ、縮小する、待つ、縮小するなどしたい。実行すると、アプリケーションは1.5秒ごとにスリープ状態になりますが、forループがコースを実行してから一度に実行されるまでアニメーションは発生しません。
以下のメインコードから問題コードを削除しても問題は解決しません。誰かが解決策や代替手段を持っていますか?私はそれがマルチスレッドと関係があると思われますが、それは単なる推測です。私はの縮み付けを@mainthreadと飾ってみましたが、違いはありません。あなたが正しい
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.animation import Animation
from kivy.uix.button import Button
import time
class Test(GridLayout):
def __init__(self, **kwargs):
super(Test, self).__init__(**kwargs)
self.cols = 2
self.thislabel1 = Label(text="One")
self.add_widget(self.thislabel1)
self.thislabel2 = Label(text="Two")
self.add_widget(self.thislabel2)
self.thislabel3 = Label(text="Three")
self.add_widget(self.thislabel3)
self.thislabel4 = Label(text="Four")
self.add_widget(self.thislabel4)
self.thislabel5 = Label(text='Five')
self.add_widget(self.thislabel5)
self.button1 = Button(text='Shrink Ray')
self.button1.bind(on_release=self.shrinkray)
self.add_widget(self.button1)
self.these_children = [self.thislabel1,self.thislabel2,self.thislabel3,self.thislabel4,self.thislabel5]
def shrinkray(self,*args):
anim = Animation(font_size=1)
for these_labels in self.these_children:
anim.start(these_labels)
time.sleep(1.5)
class MyApp(App):
def build(self):
return Test()
if __name__ == '__main__':
MyApp().run()
完璧!迅速な入力に感謝します。私はスレッディングに関する文書を掘り下げ始めますので、これについてよりよく理解することができます –