Python 以编程方式控制kivy中的旋转木马
我是kivy的新手,但我对Python和Tkinter有丰富的经验。我试图通过编程控制kivy中的旋转木马。本质上,我有一个外部python程序,我想用它在旋转木马中自动切换图像。举个例子,我在另一个文件中有一些代码: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
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问了如何以编程方式浏览幻灯片,我想知道同样的事情