以编程方式控制kivy中的轮播

时间:2017-02-16 23:30:49

标签: python python-2.7 carousel kivy

我是kivy的新手,但我对Python和Tkinter有着不错的经验。我试图以编程方式控制kivy中的旋转木马。基本上,我有一个外部python程序,我想用它来自动切换旋转木马中的图像。举个例子,我在另一个文件中有一些代码:

import time

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

然后我有了我的kivy app:

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

class CarouselApp(App):
    self.srcs = ["/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模块,但是我不确定这对我有用,因为我想在满足某些条件时而不是按时间切换幻灯片。我给出的时间示例只是我思路的一个例子。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我强烈建议使用Kivy文件来处理这种情况。其次,当您想要使用将从Internet下载的图像时使用AsyncImage,并且我可以看到您将要使用的图像是本地存储的,因此请使用Image代替

我认为你应该在扩展on_start(本例中为App)的类中实现方法CarouselApp,并使用Clock来安排函数,

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

然后在同一个班级(CarouselApp)中,您应该定义my_callback

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