Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以编程方式控制kivy中的旋转木马_Python_Python 2.7_Carousel_Kivy - Fatal编程技术网

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

Python 以编程方式控制kivy中的旋转木马,python,python-2.7,carousel,kivy,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应用程序: import kivy from kivy.app import App

我是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()
我希望能够使用最上面的代码控制旋转木马中显示的幻灯片,但我不确定该如何操作,因为在
App.run()
我已经调查了kivy的
时钟
模块,但我不确定这是否适用于我,因为我想在满足某些条件时切换幻灯片,而不是按时间切换。我举的时间例子只是我思维方式的一个例子


任何帮助都将不胜感激

我强烈建议使用Kivy文件来处理这种情况。第二,
AsyncImage
用于使用将从Internet下载的图像,正如我看到的,您将要使用的图像存储在本地,因此请改用
image

我认为您应该在扩展
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

我强烈建议使用Kivy文件来处理这种情况。第二,
AsyncImage
用于使用将从Internet下载的图像,正如我看到的,您将要使用的图像存储在本地,因此请改用
image

我认为您应该在扩展
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

你想为旋转木马的每个元素添加一个源吗?我不完全确定你的意思。从技术上讲,在转盘初始化之前,图像文件的来源都是已知的。我的目标是在创建旋转木马后,在上述代码中满足外部条件后,我想切换旋转木马中的幻灯片。我基本上想运行
Carousel.load_next()
,但我想在Carousel应用程序之外运行。我已经提供了一个答案,希望这能有所帮助。最后,您必须在开始时的
方法中安排一个函数,然后在该函数上控制您的旋转木马。是否要为旋转木马的每个元素添加源?我不完全确定您的意思。从技术上讲,在转盘初始化之前,图像文件的来源都是已知的。我的目标是在创建旋转木马后,在上述代码中满足外部条件后,我想切换旋转木马中的幻灯片。我基本上想运行
Carousel.load_next()
,但我想在Carousel应用程序之外运行。我已经提供了一个答案,希望这能有所帮助。最后,您必须在启动
方法中调度一个函数,然后在该函数上控制您的旋转木马。
AsyncImage
是我在此之前所做操作的一个痕迹。对不起,我本想换的。对我来说,使用
Clock
的问题在于,控制旋转木马的回调只应在满足某个外部条件时触发。我想我需要先开发应用程序的其他部分,然后才能对我有意义。@Taira,那是什么条件?这是一个按下的按钮吗?时钟用来处理周期性事件,所以你能给我解释一下这种情况是如何触发的吗?它可以是一个按下的按钮,但不一定。这有点难以解释,但我想我已经开始真正理解了,我记得我在学习tkinter的时候也遇到过同样的问题。XD您无法从外部控制
CarouselApp
,因为在一天结束时,kivy表现为一个大循环,您不能中断该循环,否则kivy就会死亡。因此,我的应用程序的外部部分必须集成到
CarouselApp
类中。我会试一试,我会让你知道它是否有效。这个问题还没有回答,我想OP问了如何以编程方式浏览幻灯片,我想知道同样的事情。因此,我如何通过编程方式通过一种方法或函数(如
def goto_slide(n):pass 35;?
AsyncImage
等)转到幻灯片
n
,这是我之前所做工作的一个痕迹。对不起,我本想换的。对我来说,使用
Clock
的问题在于,控制旋转木马的回调只应在满足某个外部条件时触发。我想我需要先开发应用程序的其他部分,然后才能对我有意义。@Taira,那是什么条件?这是一个按下的按钮吗?时钟用来处理周期性事件,所以你能给我解释一下这种情况是如何触发的吗?它可以是一个按下的按钮,但不一定。这有点难以解释,但我想我已经开始真正理解了,我记得我在学习tkinter的时候也遇到过同样的问题。XD您无法从外部控制
CarouselApp
,因为在一天结束时,kivy表现为一个大循环,您不能中断该循环,否则kivy就会死亡。因此,我的应用程序的外部部分必须集成到
CarouselApp
类中。我会试一试,我会让你知道它是否有效。这个问题还没有回答,我想OP问了如何以编程方式浏览幻灯片,我想知道同样的事情