Python 터미널 프로그램을 GUI로 전환하는 Gooey 라이브러리 알아보기

오늘은 Python으로 만들어진 터미널 프로그램을 GUI 그래픽으로 전환할 수 있는 라이브러리인 Gooey를 적용해보려 합니다.

Gooey 설치

우선 virtualenv로 파이썬 환경을 분리해줍니다.

pip3 install virtualenv
virtualenv -mvenv env

env라는 이름의 가상 환경을 생성합니다.

source env/bin/activate

가상환경을 폴더에서 활성화합니다.

pip3 install --upgrade pip

pip의 업그레이드가 존재하는지 확인하고 진행합니다.

pip install Gooey

pip로 Gooey를 설치합니다.

Hello world

from gooey import Gooey, GooeyParser

Gooey를 가져옵니다.

@Gooey()
def main():
    parser = GooeyParser(description='HELLO WORLD.')

GooeyParser로 gui에서 값을 파싱할 준비를 합니다.

    parser.add_argument(
        'string_field',
        metavar='enter string',
        help='hello, world!')

터미널에서 인자를 추가하듯이 인자를 추가합니다.

인자의 이름을 정하고, 기본 값을 추가할 수 있습니다.

    args = parser.parse_args()
    print(args.string_field)

인자의 이름을 조회하면 프로그램이 실행될 때에 입력한대로 출력됩니다.

if __name__ == '__main__':
    main()

main 함수를 실행합니다.

Widget

from gooey import Gooey, GooeyParser

Gooey를 가져옵니다.

@Gooey(program_name="Widget")
def main():
    parser = GooeyParser(description="widgets Example ")

GooeyParser로 gui에서 값을 파싱할 준비를 합니다.

    parser.add_argument("directory")
    parser.add_argument(
        "FileChooser", widget="FileChooser")
    parser.add_argument(
        "DirectoryChooser", widget="DirChooser")
    parser.add_argument(
        "FileSaver", widget="FileSaver")
    parser.add_argument(
        "MultiFileSaver", widget="MultiFileChooser")

일반적인 문자열을 받는 위젯부터 파일 또는 디렉토리의 위치를 지정할 수 있는 Chooser, Saver위젯까지 만들 수 있습니다.

    parser.add_argument('-c', '--count', action='count')
    parser.add_argument("-s", "--store-true", action="store_true")
    parser.add_argument("-i", "--input", default="default string")
    parser.add_argument('-t', '--type', default=0, type=int)
    parser.add_argument('-d', '--dateChooser', type=int, widget='DateChooser')
    parser.add_argument('-o', '--choices', choices=['yes', 'no'])

인자의 이름이 지정되면 선택적인 입력으로 간주되어 꼭 입력하지 않아도 됩니다.

액션에는 count, store_true 등이 있으며, 이 역시 기본 값을 지정할 수 있습니다.

타입을 지정하면 해당 타입으로 강제할 수 있습니다.

    group = parser.add_mutually_exclusive_group()
    group.add_argument('-g1', '--group-1', dest='group1', action="store_true")
    group.add_argument('-g2', '--group-2', dest='group2', action="store_true")

그룹을 만들 수 있습니다.

    args = parser.parse_args()

프로그램이 실행될 때에 인자의 값을 받습니다.

if __name__ == '__main__':
    main()

main 함수를 실행합니다.

progress

@Gooey(progress_regex=r"^\[progress\] (\d+)$")
# disable_stop_button=True

progress는 특이하게 콘솔 창에 출력되는 값을 정규식 패턴으로 찾아 인식하게 됩니다.

위 코드는 [progress] 다음에 숫자가 오면 해당 숫자만큼 진행 바가 증가합니다.

def main():
    parser = GooeyParser(prog="progress_bar example")
    _ = parser.parse_args(sys.argv[1:])
    for i in range(100):
        print("[progress] {}".format(i + 1))
        sys.stdout.flush()
        sleep(0.1)

print로 [progress] 접두사가 붙은 1부터 숫자가 출력됩니다.

if __name__ == "__main__":
    main()

main 함수를 실행합니다.

Written on May 13, 2019