2017-02-16 5 views
1

저는 kivy를 처음 사용했지만 파이썬과 Tkinter에 대한 경험이 있습니다. 나는 kivy에서 캐 러셀을 프로그래밍 방식으로 제어하려고합니다. 필자는 회전식으로 이미지를 자동으로 전환하는 데 사용하려는 외부 파이썬 프로그램이 기본적으로 있습니다.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

나는 당신이 무엇을 의미하는지 완전히 모릅니다. 이미지 파일의 소스는 기술적으로 회전식 캐 러셀이 초기화되기 전에 모두 알려져 있습니다. carouselapp을 만든 후 외부 조건이 만족되면 위의 코드에서 슬라이드를 전환하고 싶습니다. 기본적으로 'Carousel.load_next()'를 실행하고 싶지만 회전식 앱 외부에서 실행하고 싶습니다. – Taira

+0

답변을 제공해 주었고 이것이 도움이되기를 바랍니다. 결국, 당신은'on_start' 메쏘드에서 함수를 스케쥴 한 다음 그 함수에 대한 캐 러셀을 제어해야합니다. – lmiguelvargasf

답변

0

이 상황을 처리하기 위해 Kivy 파일을 사용하는 것이 좋습니다. 둘째, AsyncImage은 인터넷에서 다운로드 할 이미지를 사용할 때 사용되며 사용하려는 이미지가 로컬에 저장되어있는 것을 볼 수 있으므로 대신 Image을 사용하십시오.

나는 같은 클래스에서 다음

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

(CarouselApp)

당신이해야, 당신은 (이 경우 CarouselApp) App를 확장하는 클래스의 방법 on_start을 구현하고 Clock를 사용하여 기능을 예약해야한다고 생각 정의 my_callback :

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

'AsyncImage'는 내가 전에했던 일의 흔적이었습니다. 나는 그것을 바꾸려고했다. 미안하다. 나에게 'Clock'을 사용할 때의 문제점은 캐 러셀을 제어하는 ​​콜백은 특정 외부 조건이 충족되면 발동된다는 것입니다. 이 앱이 나에게 의미가 있기 전에 먼저 앱의 다른 부분을 개발해야한다고 생각합니다. – Taira

+0

@ 타이라, 그 조건은 무엇입니까? 'Clock'버튼을 누르면주기적인 이벤트를 처리하는 데 사용됩니다. 따라서 해당 조건이 트리거되는 방식에 대해 더 자세히 설명해 주시겠습니까? – lmiguelvargasf

+0

버튼 누르기 일 수도 있지만 꼭 그런 것은 아닙니다. 설명하기는 어렵지만 실제로 이해하기 시작한 것 같아요. 나는 tkinter를 배울 때이 똑같은 문제가 있었던 것을 기억합니다. XD 외부에서 'CarouselApp'를 제어 할 수 없습니다. 하루가 끝날 때 kivy가 커다란 루프로 나타 났으므로 그 루프 나 kivy가 중단되지 않습니다. 따라서 내 응용 프로그램의 외부 부분을 'CarouselApp' 클래스에 통합해야합니다. 나는 그것을 줄 것이며, 그것이 효과가 있다면 알려 드리겠습니다. – Taira