본문 바로가기

프로그래밍/python

Kivy - 파이썬 멀티 터치 GUI 프레임 워크

Python에는 많은 GUI 프레임워크들이 있습니다. python에 내장되어 있느 Tk를 비롯하여 wxPython, pyQT pySide, pyGTK+ 등 여러 GUI 프레임 워크들이 있죠. 모두 크로스 플랫폼 GUI 프레임워크입니다. 맥, 윈도우, 리눅스등 어디서든 동작을 하죠. 하지만 최근에는 아이폰, 안드로이드가 엄청난 강세를 보이면서 이 기종들 또한 지원하는 프레임워크가 필요해졌습니다. QT같은 경우는 안드로이드까지 지원을 하기 시작했죠. 하지만 QT는 원래 데스크탑 환경에 최적화 되어 있다 보니 스마트폰과 같은 작고 터치환경의 디바이스에는 잘 맞지 않습니다.

이런 상황에서 나온것이 Kivy입니다. Kivy 또한 위의 프레임워크들과 마찬가지로 크로스 플랫폼 GUI 프레임워크 입니다. Kivy가 위의 프레임워크들과 비교해서 강점으로 내세우는 부분은 멀티터치 지원입니다. Kivt는 윈도우, 맥, 리눅스, 안드로이드, 아이폰등을 지원합니다.(사실 아직 아이폰은 완벽하게 지원하지 못하고 있습니다.) 

Kivy: http://kivy.org

Kivy의 특징으로는 OpenGL ES2로 GUI 환경을 구현합니다. OpenGL는 그 자체로 크로스 플랫폼이라고 할 수 있기 때문에 Kivy가 위의 프레임워크들과 다르게 스마트폰 디바이스까지 지원할 수 있는 이유이기도 합니다. 또한 OpenGL ES로 GUI를 구현하면 GPU 가속을 사용하기 때문에 UI의 속도 향상을 갖어올 수 있습니다. OpenGL를 GUI환경에서 사용하였을때 얻는 이점에 대해 자세히 알아보시려면 전에 제가 올린 포스팅을 참조해 주세요.

OpenGL in GUI: http://edoli.tistory.com/55

Kivy를 다른 파이썬 프레임워크하고만 비교하면 안되겠죠. 이번에는 안드로이드와 아이폰 네이티브 GUI와 비교해 어떤 장점이 있는지 설명하겠습니다.

Kivy는 파이썬 기반입니다. 파이썬은 쉽고 빠른 개발이 가능합니다. 그래서 Kivy를 사용하면 네이티브로 개발하는 것보다 빠르게 개발할 수 있습니다. 원래 파이썬을 주로 사용하던 프로그래머라면 Kivy를 통한 개발이 훨씬 수월할겁니다. 또한 네이티브 GUI는 플랫폼 종속적인데 비해 Kivy는 데스크탑에서도 사용할 수 있는 크로스 플랫폼입니다. 윈도우 8이 나옴에 따라 윈도우 환경에서의 멀티터치도 중요해 지고 있습니다. Kivy는 이런 환경까지 잘 지원할 수 있습니다. 결론적으로 Kivy는 네이티브 GUI 비해 속도는 좀 떨어지지만, 동일한 코드로 여러 환경에서 동일한 인터페이스를 구현할 수 있으며, 프로그래밍 하는 시간도 훨씬 짧습니다.

Kivy의 공식 홈페이지에 있는 Hello world 버튼이 있는 어플리케이션을 만드는 코드는 다음과 같습니다.

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text='Hello World')

TestApp().run()

굉장히 짧죠?

Kivy의 또다른 장점은 무료라는 점입니다. MonoTouch라는 C# 기반의 크로스 플랫폼 프레임워크는 라이센스 비용이 무려 400달러 인데 비해 Kivy는 LGPL 라이센스 아래에 완전 무료입니다.

파이썬 기반의 멀티터치 GUI 프레임워크 Kivy는 많은 장점을 가지고 있습니다. 아직 디바이스에 대한 지원이 완벽하지 않아서 널리 쓰이지 않고 있지만, Kivy가 어느정도 안정화 단계까지 간다면 많이 사용하게 될 프레임워크인것 같습니다.