본문 바로가기

코딩/파이썬 kivy

kivy 스터디 010. 클럭 이벤트 2 (clock events) - schedule_interval()

kivy : clock events : schedule_interval

클럭 이벤트 2 (clock events) - schedule_interval()

메서드 schedule_interval은 schedule_interval을 호출한 이후 설정한 callback 메서드 또는 함수를 일정한 주기로 반복 실행시키고자 할 때 사용한다.

 

메서드 schedule_interval은 클래스 CyClockBase 내에 정의되어 있는 메서드이다.

 

def schedule_interval(self, callback, timeout)

 

화면 왼쪽 및 오른쪽에 버튼을 표시하는 애플리케이션에,

 

schedule_interval 메서드를 포함하는 애플리케이션

 

클래스 MyApp 내 메서드 Build에서 schedule_interval 메서드를 호출하여 1초 주기로 my_clock_callback 메서드가 실행되게 한다.

 

import kivy
kivy.require('2.0.0')

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.clock import Clock

class ScreenLayout(GridLayout):
    def __init__(self, **kwargs):
        GridLayout.__init__(self, **kwargs)
        self.cols = 2
        self.button1 = Button(text='Button 1')
        self.add_widget(self.button1)
        self.button2 = Button(text='Button 2')
        self.add_widget(self.button2)

class MyApp(App):
    def build(self):
        self.clock_event = Clock.schedule_interval(self.my_clock_callback, 1)
        return ScreenLayout()

    def my_clock_callback(self, dt):
        print('my clock callback', dt)

if __name__ == '__main__':
    MyApp().run()

 

위의 코드를 실행하면, 파이참 출력창에 1초 주기로 my clock clallback x.xxx 문구가 표시된다.

메서드 schedule_interval의 timeout 값은 0.5와 같이 float 값으로 ms를 표현할 수 있다.

 

schedule_interval 메서드에 의한 callback 메서드 실행

 

메서드 schedule_interval에 의해 반복적으로 실행되는 메서드 또는 함수의 실행을 중지하고자 한다면,

 

아래와 같이 메서드 schedule_interval에 의해 생성된 ClockEvent 객체에 대하여 cancel 메서드를 사용하거나,

(my_clock_callback 메서드 내에 cancel()을 호출하여 my_clock_callback이 한번만 호출하게 함)

 

    def my_clock_callback(self, dt):
        print('my clock callback', dt)
        self.clock_event.cancel()

 

Clock.unschedule 메서드를 사용하거나,

 

    def my_clock_callback(self, dt):
        print('my clock callback', dt)
        Clock.unschedule(self.clock_event)

 

또는 호출되는 callback 메서드 또는 함수에서 False를 반환한다.

 

    def my_clock_callback(self, dt):
        print('my clock callback', dt)
        return False