Kivy란 무엇인가?
Kivy는 멀티터치 앱처럼 혁신적인 사용자 인터페이스(UI)를 가진 애플리케이션을 빠르게 개발할 수 있도록 지원하는 오픈소스 파이썬 라이브러리입니다. 안드로이드 모바일 앱은 물론 데스크톱 애플리케이션 개발에도 폭넓게 활용되고 있습니다.
이번 글에서는 Kivy에서 버튼이 눌렸을 때 발생하는 이벤트를 처리하는 방법을 실제 예제와 함께 살펴보겠습니다.
참고로 Kivy가 아직 설치되어 있지 않다면, 아래 명령어로 간단히 설치할 수 있습니다.
pip install kivy
예제 개요
아래 예제에서는 수평(horizontal) BoxLayout 안에 버튼(Button)과 라벨(Label)을 하나씩 배치했습니다. 먼저 버튼과 라벨에 초기 텍스트를 지정한 뒤, 버튼 클릭 시 발생하는 on_press 이벤트를 바인딩하여 버튼과 라벨의 텍스트를 동시에 변경하도록 구성했습니다.
전체 코드는 하나의 파이썬 파일로 작성되어 있어 그대로 복사해서 실행해 볼 수 있습니다.
전체 코드
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
class ButtonPressApp(App):
def __init__(self):
super(ButtonPressApp, self).__init__()
self.btn = Button(text='Submit Button')
self.lbl = Label(text='Some text here.')
def build(self):
self.btn.bind(on_press=self.click_event)
layout = BoxLayout()
layout.orientation = 'horizontal'
layout.add_widget(self.btn)
layout.add_widget(self.lbl)
return layout
def click_event(self, obj):
self.btn.background_normal = ''
self.btn.color = (1, 0, 0, 0.8)
self.btn.text = 'Button Pressed'
self.lbl.text = 'Text Changed'
MainLayout = ButtonPressApp()
MainLayout.run()코드 핵심 포인트
- bind(on_press=...): 버튼이 눌릴 때 실행될 콜백 함수(이벤트 핸들러)를 연결합니다.
- BoxLayout: 위젯들을 가로 또는 세로 방향으로 나란히 배치하는 레이아웃입니다. 여기서는
'horizontal'로 설정하여 버튼과 라벨을 좌우로 배치했습니다. - click_event 메서드: 버튼의 기본 배경 이미지를 제거하고(
background_normal = '') 글자색을 붉은 계열 RGBA 값으로 변경한 뒤, 버튼과 라벨의 텍스트를 새로 설정합니다.
실행 결과
위 코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다.
버튼을 누르기 전
버튼에는 'Submit Button', 라벨에는 'Some text here.'라는 초기 텍스트가 표시됩니다.

버튼을 누른 후
버튼을 누르는 순간 이벤트가 발생하여 버튼 텍스트는 'Button Pressed'로, 라벨 텍스트는 'Text Changed'로 변경되며, 버튼 색상도 함께 바뀝니다.

마무리
이처럼 Kivy에서는 bind() 메서드를 통해 위젯에 다양한 이벤트를 손쉽게 연결할 수 있습니다. on_press 외에도 on_release, on_touch_down 등 여러 이벤트를 조합하면 더욱 풍부한 인터랙션을 구현할 수 있으니, 이 예제를 응용해 직접 다양한 UI 동작을 실험해 보시기 바랍니다.