以编程方式控制kivy中的旋转木马

Programmatically controlling a carousel in kivy

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

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 = ["/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()

我希望能够使用顶部代码控制轮播中显示哪张幻灯片,但我不确定该怎么做,因为在 [=12 之后我无法执行任何操作=] 我研究了 kivy 的 Clock 模块,但我不确定这是否适合我,因为我想在满足某些条件时而不是按时间切换幻灯片。我举的时间例子只是我思路的一个例子。

如有任何帮助,我们将不胜感激!

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

我认为你应该在扩展 App 的 class 中实现方法 on_start(在本例中为 CarouselApp)并使用 [=17 安排函数=]作为,

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

然后在同一个 class (CarouselApp) 你应该定义 my_callback:

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