Kivy를 이용해서 python에서 GUI 프로그래밍을 할 때 Kivy만이 가진 특성 중 하나인 Kv language를 사용하는 방법에 대한 간단한 개념이다.

kv code를 python 코드에 포함(load)시키는 방법에는 2가지 방법이 있다.


1. by name convention(이름으로 지정하는 방법)

python의 클래스 이름과 동일한 kv 파일명을 가진 kv 파일을 만들면 자동으로 이 파일을 load한다.


2. Builder 클래스를 이용하여 직접 python 코드에 load하는 방법

  -. Builder.load_file('some/path/somefile.kv')

  -. Builder.load_string(my_kv_string) 

     이 경우는 python 코드 안에서 string 형태로 kv 코드를 만들고 이를 Build.load_string()을 이용해서 사용하는 방석이다.

     (구체적 예제코드는 여기를 참조)


아래의 코드는 by name convention 방식으로 kv 코드를 python 코드에 load하는 방법이다.


  • exkvtest.kv의 내용이다

<Label>

    text: 'Hello'+' World'

    font_size: 50



  • exkvtest.py의 내용이다.

#-*- coding: utf-8 -*-

from kivy.app import App

from kivy.uix.label import Label


'''

kv의 원리

-. kv 파일명과 python 파일명이 같아야 함. 단 모두 소문자라야 함. ExKvTest.kv, ExKvTest.py식이면 안됨.

-. exkvtest.kv, exkvtest.py식이어야 한다

-. python 소스 코드의 클래스 이름도 kv 파일과 동일해야 한다. 단 소스 코드에서의 class 이름은 소문자로만 하지 

-. 않아도 된다. class ExKvTest(App)과 같이 해도 된다. 또한 소스 코드상에서의 class이름 끝에 App이라는 문자는 상관없다.


There are two ways to load Kv code into your application:

By name convention:

   Kivy looks for a Kv file with the same name as your App class in lowercase, minus “App” if it ends with ‘App’ e.g:

      MyApp -> my.kv

'''


# 안됨

# class MyKvTest(App):

#     def build(self):

#         # return Label(text='Hi~')

#         return Label()


# 잘 됨

class ExKvTestApp(App):

    def build(self):

        # return Label(text='Hi~')

        return Label()



if __name__ == '__main__':

    # MyKvTest().run()  # 안됨

    ExKvTestApp().run()  # 잘됨


+ Recent posts