본문 바로가기
Programming/Python_Etc

파이썬 kivy 시작하기 1 - Kivy란?

by Wilkyway 2021. 9. 24.
반응형

파이썬에는 tkinter, pyqt(pyside2), wxpython외에 Kivy라는 라이브러리도 있습니다.

Kivy는 크로스 플랫폼 사용자 인터페이스의 신속한 개발을 위한 오픈 소스 파이썬 라이브러리다. 키비 응용 프로그램을 사용하면 리눅스, 윈도우에 사용하는 GUI 프로그램뿐 아니라 안드로이드, IOS 용 GUI도 개발할 수 있다고 합니다. PC에서는 SDL2와 OpenGL 을 사용해서 그래픽 API를 사용할 수 있고 모바일 환경에서 OpenGL ES (임베디드 시스템용 OpenGL)를 사용하여 균일하고 안정적인 그래픽을 표현할 수 있습니다. 그리고 MIT 라이센스이므로 무료로 사용하는데 제한은 없습니다.

Kivy는 특이하게도 화면을 구성하는 kv파일과 로직을 구성하는 일반 py파일이 구분되어있습니다. JavaFX나 C#의 WPF를 생각하시면 이해될 거라고 생각됩니다. 
 
간단한 예제를 만들어보겠습니다.

 

1. 라이브러리 설치

pip install kivy

# 의존성 문제가 발생할 경우 (먼저 설치 필요)
pip install docutils pygments pypiwin32 kivy_deps.sdl2 kivy_deps.glew kivy_deps.gstreamer

 

2. main.py

from kivy.app import App
from kivy.uix.gridlayout import GridLayout  # 그리드 레이아웃
from kivy.uix.label import Label            # 라벨
from kivy.uix.textinput import TextInput    # 텍스트 인풋
from kivy.uix.button import Button
import os

class LoginScreen(GridLayout):
    def __init__(self, **kwargs):
        super(LoginScreen, self).__init__(**kwargs) # 오버로드되는 원래 클래스의 기능을 구현
        # fontName = '/'.join([os.getenv('SystemRoot'), '/fonts/NanumGothic.ttf'])
        fontName = 'NanumGothic.ttf'
        self.cols = 1

        self.upper = GridLayout()
        self.upper.cols = 2

        self.upper.add_widget(Label(text='이름',font_name=fontName))

        self.username = TextInput(multiline=False)
        self.upper.add_widget(self.username)

        self.upper.add_widget(Label(text='비밀번호',font_name=fontName))

        self.password = TextInput(password=True, multiline=False)
        self.upper.add_widget(self.password)

        self.add_widget(self.upper)

        self.lower = Button(text="Submit", font_size=40)
        self.lower.bind(on_press=self.pressed)  # on_press, on_release, on_state
        self.add_widget(self.lower)

    def pressed(self, instance):
        # print(instance, "is pressed")
        print("user name:", self.username.text, "password:", self.password.text)
        self.username.text = ""
        self.password.text = ""


class MyApp(App):
    def build(self):
        return LoginScreen()

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

 

<결과>

반응형

댓글