Sugar Activity Tutorial/lang-ko
이 튜토리얼은 헬로우 월드 액티비티 번들을 만드는 법을 단계별로 설명합니다.
번들 디렉토리 구조를 만듭니다:
mkdir HelloWorldActivity.activity mkdir HelloWorldActivity.activity/activity
activity.info file을 작성하여, 액티비티 서브디렉토리 내의 귀하의 번들을 설명합니다 (i.e. HelloWorldActivity.activity/activity/activity.info). 액티비티 번들 사양은 각 필드의 의미를 상세히 설명합니다.
[Activity] name = HelloWorld service_name = org.laptop.HelloWorldActivity class = HelloWorldActivity.HelloWorldActivity icon = activity-helloworld activity_version = 1 show_launcher = yes
아이콘 포맷에 따라, 귀하의 액티비티를 위한 아이콘을 만들어, 액티비티 서브디렉토리에 위치시킵니다. 이 파일 이름은 info "activity-helloworld.svg" 에서의 이름과 같아야만 합니다.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ <!ENTITY fill_color "#FFFFFF"> <!ENTITY stroke_color "#000000"> ]> <svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"> <rect x="1" y="1" width="48" height="48" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:2"/> </svg>
setup.py 스크립트를 탑 레벨 디렉토리 (i.e. hello.activity/setup.py)에 작성합니다. 대부분 다음과 같은 모습입니다:
#!/usr/bin/env python from sugar.activity import bundlebuilder if __name__ == "__main__": bundlebuilder.start()
귀하의 액티비티를 코딩합니다. .info 파일 안에 "class"로 표현된 이름이 귀하의 코드를 구동할 클래스 이름입니다. 위의 activity.info의 경우, 우리는 탑 레벨 모듈을 HelloWorldActivity.HelloWorldActivity로 이름 붙였습니다 (모듈 이름이 대문자로 시작하는 것은 파이선 스타일의 좋지 못한 관례입니다. 보다 표준적인 형태의 이름을 이용하셔도 무방합니다).
from sugar.activity import activity import logging import sys, os import gtk class HelloWorldActivity(activity.Activity): def hello(self, widget, data=None): logging.info('Hello World') def __init__(self, handle): print "running activity init", handle activity.Activity.__init__(self, handle) print "activity running" self.set_title('Hello World') # Creates the Toolbox. It contains the Activity Toolbar, which is the # bar that appears on every Sugar window and contains essential # functionalities, such as the 'Collaborate' and 'Close' buttons. toolbox = activity.ActivityToolbox(self) self.set_toolbox(toolbox) toolbox.show() # Creates a new button with the label "Hello World". self.button = gtk.Button("Hello World") # When the button receives the "clicked" signal, it will call the # function hello() passing it None as its argument. The hello() # function is defined above. self.button.connect("clicked", self.hello, None) # Set the button to be our canvas. The canvas is the main section of # every Sugar Window. It fills all the area below the toolbox. self.set_canvas(self.button) # The final step is to display this newly created widget. self.button.show() print "AT END OF THE CLASS"
패키지에 포함되는 파일 목록을 보여주는 MANIFEST 파일을 만드세요. (파일 이름 끝에 공간을 남기면 안됩니다.)
HelloWorldActivity.py
귀하의 디렉토리 구조는 다음과 같은 모습이어야 합니다:
HelloWorldActivity.activity/ HelloWorldActivity.activity/setup.py HelloWorldActivity.activity/activity HelloWorldActivity.activity/activity/activity.info HelloWorldActivity.activity/activity/activity-helloworld.svg HelloWorldActivity.activity/HelloWorldActivity.py HelloWorldActivity.activity/MANIFEST
개발할 번들을 셋업하세요.
./setup.py dev
(It appears this just creates a symlink in ~/Activities .)
구동하기
슈가를 구동하면, 귀하의 액티비티 아이콘이 프레임에 나타나야 합니다. (ctrl-alt-erase로 슈가를 재시작하세요.)
귀하의 번들 디렉토리에서 곧바로 코드를 편집할 수도 있습니다. 귀하의 액티비티가 처음 런치될 때는 창을 닫더라도 프로세스가 남아 있으므로, 나중에 클릭으로 리로드하려면, sugar-activity-factory를 kill 해야 합니다.
배포
귀하의 번들을 배포할 XO 패키지를 만드세요. (XO 파일은 JAR 파일처럼, 일부 여분의 메타데이터와 더불어 MANIFEST에서 압축 파일로 구성되어야 합니다. 일부 현지화 기능이 있으며, 나중에는 서명을 첨부할 수 있을 것으로 기대합니다.)
./setup.py dist
이 xo를 노트북에 설치하려면, 인스톨러 스크립트를 이용하면 됩니다.
sugar-install-bundle HelloWorld-1.xo
XXX Explain what the -1 suffix means.