본문 바로가기

코딩/파이썬 kivy

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

kivy : clock events : create_trigger

클럭 이벤트 3 (clock events) - create_trigger()

메서드 create_trigger는 호출하는 횟수에 관계없이 설정한 메서드 또는 함수를 한번만 실행시키고자 할 때 사용한다.

 

메서드 create_trigger의 매개변수 정의는 다음과 같다.

 

def create_trigger(self, callback, timeout=0, interval=False, release_ref=True)

 

아래의 코드를 실행하면, my_clock_callback 메서드는 3번 실행된다.

 

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_once(self.my_clock_callback, 0)
        self.clock_event = Clock.schedule_once(self.my_clock_callback, 0)
        self.clock_event = Clock.schedule_once(self.my_clock_callback, 0)
        return ScreenLayout()

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

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

 

schedule_onec 메서드의 중복 호출

 

하지만 create_trigger 메서드를 사용하면, my_clock_callback 메서드는 1번 만 실행된다.

 

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.create_trigger(self.my_clock_callback)
        self.clock_event()
        self.clock_event()
        self.clock_event()
        return ScreenLayout()

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

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

 

trigger 이벤트의 중복 호출