Kivy는 멀티터치 앱처럼 혁신적인 사용자 인터페이스를 갖춘 애플리케이션을 빠르게 개발할 수 있도록 지원하는 오픈소스 파이썬 라이브러리입니다. 안드로이드 애플리케이션은 물론 데스크톱 애플리케이션 개발에도 폭넓게 활용되고 있습니다. 이번 글에서는 Kivy에서 제공하는 앵커 레이아웃(AnchorLayout)을 활용해 위젯을 원하는 위치에 배치하는 방법을 자세히 살펴보겠습니다.
AnchorLayout이란?
AnchorLayout을 사용하면 위젯을 화면의 특정 모서리나 경계에 손쉽게 고정할 수 있습니다. kivy.uix.anchorlayout.AnchorLayout 클래스가 이 기능을 구현하며, 위치 지정에는 두 가지 핵심 매개변수가 사용됩니다.
- anchor_x: 수평 위치를 지정하며 'left', 'right', 'center' 값을 사용합니다.
- anchor_y: 수직 위치를 지정하며 'top', 'bottom', 'center' 값을 사용합니다.
아래 예제에서는 두 개의 버튼을 생성하고, 각각 서로 다른 앵커에 연결한 뒤 하나의 BoxLayout에 담아 화면에 표시하는 프로그램을 만들어 보겠습니다.
예제 코드
from kivy.app import App
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class AnchorLayoutApp(App):
def build(self):
# 앵커 레이아웃 1: 왼쪽 하단에 버튼 배치
anchor1 = AnchorLayout(anchor_x='left', anchor_y='bottom')
button1 = Button(text='Bottom-Left', size_hint=(0.3, 0.3),
background_color=(1.0, 0.0, 0.0, 1.0))
anchor1.add_widget(button1)
# 앵커 레이아웃 2: 오른쪽 상단에 버튼 배치
anchor2 = AnchorLayout(anchor_x='right', anchor_y='top')
button2 = Button(text='Top-Right', size_hint=(0.3, 0.3),
background_color=(1.0, 0.0, 0.0, 1.0))
anchor2.add_widget(button2)
# 박스 레이아웃 생성 후 두 앵커 레이아웃 추가
BL = BoxLayout()
BL.add_widget(anchor1)
BL.add_widget(anchor2)
# 박스 레이아웃 반환
return BL
# Kivy 앱 실행
if __name__ == '__main__':
AnchorLayoutApp().run()코드 설명
첫 번째 앵커 레이아웃은 anchor_x='left', anchor_y='bottom'으로 설정하여 빨간색 버튼을 왼쪽 하단에 배치합니다. 두 번째 앵커 레이아웃은 anchor_x='right', anchor_y='top'으로 설정해 같은 크기의 버튼을 오른쪽 상단에 배치합니다. 각 버튼의 size_hint=(0.3, 0.3)은 부모 영역의 30% 크기를 의미합니다. 마지막으로 두 앵커 레이아웃을 BoxLayout에 담아 반환하면, 화면이 두 영역으로 나뉘어 각각의 버튼이 지정된 위치에 나타납니다.
실행 결과
위 코드를 실행하면 다음과 같은 결과 화면을 확인할 수 있습니다.
