2017-02-16 20 views
1

私はkivyの新人ですが、私はPythonとTkinterでまともな経験をしています。私はプログラムでKivyのカルーセルを制御しようとしています。基本的に、カルーセル内の画像を自動的に切り替えるために使用する外部のPythonプログラムがあります。例を作るために、私は別のファイルにいくつかのコードを持っている:kivyのカルーセルをプログラムで制御する

import time 

while True: 
    time.sleep(1) 
    #do something to control the carousel 

、その後、私は私のkivyアプリを持っている:

import kivy 
from kivy.app import App 
from kivy.uix.carousel import Carousel 
from kivy.uix.image import AsyncImage 

class CarouselApp(App): 
    self.srcs = ["https://stackoverflow.com/a/bunch.png", "/of/paths.jpg", "/to/images.png."] 

    def build(self): 
     self.carousel = Carousel(direction="right") 
     for i in range(0, len(self.srcs)): 
      src = self.srcs[i] 
      image = AsyncImage(source=src, allow_stretch=True) 
      self.carousel.add_widget(image) 
     return self.carousel 

if __name__ == "__main__": 
    CarouselApp().run() 

私はカルーセルに表示されているスライドを制御できるようにしたいと思いますトップコードを使用していますが、後で何も実行できないので、どうすればいいのか分かりません。App.run() 私はkivyのClockモジュールを調査しましたが、特定の条件が満たされたときにスライドを切り替えることができます。私が与えた例は、私の考え方の一例です。

ご協力いただければ幸いです!

+0

カルーセルの各要素にソースを追加しますか? – lmiguelvargasf

+0

私はあなたが何を意味するか完全にはわかりません。イメージファイルのソースは、カルーセルが初期化される前に、すべて技術的に知られています。カルーセルアプリを作成した後で、外部の条件が満たされた後、私はカルーセルのスライドを切り替えたいと思っています。私は基本的に 'Carousel.load_next()'を実行したいと思いますが、私はカルーセルアプリの外からやりたいと思います。 – Taira

+0

私は答えを出しましたが、これが役立つことを願っています。最後に、 'on_start'メソッドで関数をスケジューリングし、その関数でカルーセルを制御する必要があります。 – lmiguelvargasf

答えて

0

この状況を処理するためにKivyファイルを使用することを強くお勧めします。第二に、AsyncImageは、インターネットからダウンロードされる画像を使用する場合に使用され、使用する画像がローカルに保存されていることがわかるので、代わりにImageを使用します。

私は、あなたがしなければならない(CarouselApp)あなたはAppを拡張したクラス(この場合はCarouselApp)方法on_startを実装し、同じクラスに続いて

def on_start(self): 
    Clock.schedule_interval(self.my_callback, 1) 

、としてClockを使用して機能をスケジュールするべきだと思います定義my_callback

def my_callback(self, nap): 
    if condition_is_satisfied: # this is supposed to be your condition 
     # control carousel 
+0

'AsyncImage'はこれまで私がやっていたものからの痕跡でした。私はそれを変更するつもりだった、申し訳ありません。私にとって「時計」を使用する際の問題は、カルーセルを制御するコールバックが、特定の外部条件が満たされたときにのみ起動することになっていることです。私はこれが私に意味をなされる前に、まずアプリケーションの他の部分を開発する必要があると思う。 – Taira

+0

@Taira、その状態は何ですか?それはボタンが押されていますか?「クロック」は定期的なイベントを処理するために使用されるので、その状態がどのようにトリガーされるかについて私にもっと説明できますか? – lmiguelvargasf

+0

ボタンプレスでもかまいませんが、必ずしもそうである必要はありません。説明するのは難しいですが、私は実際に理解し始めていると思います。私はtkinterを学んでいたときにこの同じ問題を覚えていると思います。 XDでは、外部からCarouselAppを制御することはできません。なぜなら、kivyは一日の終わりに大きなループとして現れ、そのループやkivyが中断することはないからです。したがって、私のアプリケーションの外部部分は 'CarouselApp'クラスに統合されなければなりません。私はそれを行って、それが動作するかどうかを知らせます。 – Taira

関連する問題