Python asciimatics 패키지를 사용하여 텍스트 UI 만들기
Python asciimatics 패키지를 사용하여 텍스트 UI 만들기
오늘은 Python으로 터미널에서 텍스트 UI를 만들 수 있는 asciimatics 패키지에 대하여 알아보려 합니다.
개요
Asciimatics는 모든 플랫폼에서 전체 화면 텍스트 UI를 만드는 패키지입니다.
Asciimatics 설치
우선 virtualenv로 파이썬 환경을 분리해줍니다.
1
pip3 install virtualenv
1
virtualenv -mvenv env
env라는 이름의 가상 환경을 생성합니다.
1
source env/bin/activate
가상환경을 폴더에서 활성화합니다.
1
pip install asciimatics
pip로 asciimatics를 설치합니다.
출력
1
2
from asciimatics.screen import Screen
from time import sleep
화면의 기본 상태를 추적해서 그려질 Screen 클래스를 가져옵니다.
잠시 멈춰줄 time 패키지도 가져옵니다.
1
2
3
def main(screen):
screen.print_at('Hello world!', 0, 0)
screen.print_at('Hello world!', 0, 1)
x축과 y축을 기점으로 텍스트를 터미널에 그립니다.
1
screen.refresh()
화면을 새로 고쳐서 그렸던 내용을 출력합니다.
1
2
3
screen.move(0, 2)
screen.draw(10, 2)
screen.refresh()
그리는 커서를 지정된 x축과 y축에 놓고, 줄을 그립니다.
그리고 화면을 새로 고칩니다.
1
sleep(10)
sleep으로 화면을 잠시 지연시킵니다.
1
2
if __name__ == '__main__':
Screen.wrapper(main)
만들어둔 클래스로 새로운 Screen을 구축합니다.
입력
1
from asciimatics.screen import Screen
화면의 기본 상태를 추적해서 그려질 Screen 클래스를 가져옵니다.
1
2
3
4
def main(screen):
while True:
screen.print_at('input : ', 0, 0)
screen.refresh()
x축과 y축을 0으로 기준하여 텍스트를 터미널에 그리고 새로 고칩니다.
1
2
3
4
5
6
ev = screen.get_key()
if ev in (ord('Q'), ord('q')):
return
if ev is not None:
screen.print_at(chr(ev), 0, 1)
screen.refresh()
get_key로 키보드 입력을 받고, 만약 Q가 입력되면 while문을 탈출하여 해당 작업을 종료합니다.
그 외의 키가 입력되었을 때에 문자를 출력합니다.
1
Screen.wrapper(main)
만들어둔 클래스로 새로운 Screen을 구축합니다.
트리 그리기
1
2
3
4
from asciimatics.effects import Print
from asciimatics.renderers import StaticRenderer
from asciimatics.scene import Scene
from asciimatics.screen import Screen
asciimatics 패키지를 가져옵니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tree = r"""
${3,1}*
/ \
/ \
/_ _\
/ \
/ \
/ \
/__ __\
/ \
/ \
/ \
/___________\
${3}|||
${3}|||
"""
트리를 그립니다.
1
2
3
4
5
6
def main(screen):
effects = [
Print(screen, StaticRenderer(images=[tree]),
colour=Screen.COLOUR_GREEN, x=0, y=0)
]
screen.play([Scene(effects, -1)], stop_on_resize=True)
지정된 위치에 지정된 텍스트 이미지를 출력할 수 있는 Print와 해당 장면을 재생할 수 있는 play로 터미널에 트리를 그릴 수 있습니다.
1
2
while True:
Screen.wrapper(main)
위 코드와 마찬가지로 새로운 Screen을 구축합니다.
This post is licensed under CC BY 4.0 by the author.