Python GUI 프레임워크 종류와 선택기준

개요

파이썬을 처음 공부하면 input(), print() 함수로 입,출력을 진행하게됩니다. 

즉, Text 기반의 User Interface 입니다.

보통 자료형, 조건문, 반복문, 함수, 클래스 등 기초적인 문법을 공부하고나면, 이젠 좀 더 복잡하고 사용자 친화적인 UI (User Interface)를 구성하고 싶은 욕구가 생겨납니다.

그리고 GUI 자료를 찾아 보는 것이 일반적인 프로그래밍 언어 공부절차라고 생각합니다.

 

GUI (Graphic User Interface)

더 이상 input(), print() 로는 그 갈증을 채워주기 어렵고 검색을 통해 tkinter, pyqt, kivy, wxpython 라는  GUI Framework을 찾아 그 중 하나를 배워가게 됩니다.

Source : https://www.askpython.com

Python의 GUI 프레임워크에 대해 chatGPT와 상의해 보았습니다.


1. Tkinter

  • 설명: 파이썬 표준 라이브러리로 포함된 GUI 프레임워크로, 별도의 설치 없이 바로 사용할 수 있습니다.
  • 특징:
    • 간단한 GUI 애플리케이션에 적합.
    • 위젯(버튼, 레이블, 텍스트 박스 등)을 지원.
    • 비교적 가볍고 배우기 쉬움.
  • 단점: 디자인이 다소 기본적이고 복잡한 UI를 구현하기 어려움.

 

2. PyQt/PySide

  • 설명: Qt를 기반으로 한 강력한 GUI 프레임워크. PyQt는 상용 및 GPL 라이선스를 따르고, PySide는 LGPL 라이선스를 따릅니다.
  • 특징:
    • 복잡하고 세련된 애플리케이션 개발 가능.
    • Qt 디자이너를 사용하여 UI를 시각적으로 설계 가능.
    • 크로스 플랫폼 지원.
  • 단점: 비교적 무겁고 학습 곡선이 가파를 수 있음.

 

3. Kivy

  • 설명: 크로스 플랫폼 지원에 중점을 둔 GUI 프레임워크. 모바일 앱(Android, iOS)과 데스크톱 앱을 모두 개발할 수 있음.
  • 특징:
    • 터치 스크린을 지원.
    • GPU를 활용한 고성능 그래픽 렌더링.
    • 멀티 플랫폼 빌드 가능.
  • 단점: 기본 위젯이 제한적이며, 복잡한 UI 구현에 시간이 걸릴 수 있음.

 

4. wxPython

  • 설명: C++로 작성된 wxWidgets 라이브러리를 파이썬에 포팅한 프레임워크.
  • 특징:
    • 네이티브 OS 위젯 스타일을 유지하여 자연스러운 UI 제공.
    • 크로스 플랫폼 지원.
    • 다양한 고급 기능 지원.
  • 단점: Tkinter보다 복잡하며 문서화가 다소 부족할 수 있음.

 

선택 기준

  1. 간단한 UI: Tkinter.
  2. 복잡한 UI: PyQt 또는 wxPython.
  3. 크로스 플랫폼(모바일 포함): Kivy.
  4. 네이티브 스타일 중시: wxPython 또는 PyGTK.

이라는 답변을 얻을 수 있었습니다

 

그래서 넌 어떤걸 사용해

저는 PyQt / PySide를 사용합니다. 그 이유는

1. 배우기 어렵지만 Powerful

Tkinter는 파이썬에 기본적으로 포함(내장 모듈) 되어 있고, 배우기 쉽지만 상업적인 용도(완성도높은) 앱을 만들기에 기능이 부족합니다.

따라서 배우기 어렵지만 중복 공부를 막기위해 가장 어려운 끝판대장 하나를 공부하는게 이득이라 생각합니다.

"GUI는 순서대로 배운다" 라는 개념은 필요없고 일단 하나만 잘 사용하면 됩니다.


2. 사용자층이 두텁다, widely used

저는 Qt 제작사와 아무 관련이 없습니다.

하지만 개인적으로 좋은 제품이니 오래 사용해왔고 LG, 현대자동차, 벤츠, ABB 등 글로벌 기업에서도 사용합니다.

Source : Qt Company

따라서 회사가 망해서 공부한 내용이 물거품이 될 가능성은 낮습니다.

대학시절 열심히 공부한 MFC는 이제 구 시대의 유물이 되었습니다.😩


3. 문서화가 잘되어있다, well-documented

사실 제가 가장 중요시 하는 부분입니다.

PyQt / PySideC++ 로 만들어진 Qt의 Python binding 입니다.

Qt의 문서화는 정말 훌륭합니다. 👍

Google 검색으로 Qt Class를 검색하면 언제든 버전별로 잘 정리된 도움말을 살펴볼 수 있습니다.

물론 영어로 되어있지만 그것은 스스로 극복해야할 문제이지 Qt의 문제가 아닙니다.


4. GUI외 기능, not limited to GUI

눈으로 보여지는 GUI 위젯(창, 버튼, 입력창, 등) 외에도 데이터를 다루거나 네트워크, 웹, 쓰레드, 블루투스 등 다양한 기능을 지원합니다.

학원 블로그 게시물 중에도 Qt WebEngine (크로미움 기반)을 이용해 웹브라우저를 만든 예시가 있습니다.   


5. 여러 운영체제와 호환, Cross-Platform

Qt의 장점중 하나는 Cross-Platform 을 지원하는 것입니다.

즉, Qt 기반의 앱을 만들면 Windows, Linux, iOS, Android 등 여러 운영체제에서 사용이 가능합니다.

하지만 Python 기반 PyQt는 해당하지 않으며 C++ 기반 Qt만 가능합니다.

저는 파이썬기반 Mobile OS(Android, iOS) 용 앱을 Kivy로 만드는 것은 공부목적을 제외하고 상업적인 목적 (사용자층이 적어서) 에서는 부적합하다 판단하고 있습니다.

C++기반 Qt 역시 Android OS 용 게임을 제작한 게시물예제가  블로그에도 있습니다만, 상업적인 목적의 앱을 만들기에는 UI 관점에서 부족한 부분이 존재합니다.

 

저는 Python 언어를 Mobile OS 용으로 사용하지 않고,

간단한 모바일앱은 Dart + Flutter

Android 전용앱은 Kotlin + Jetpack Compose로 만들고 있습니다. 

로마에 가면 로마법을 따라야 하듯이 각 운영체제에 적합한 언어를 사용하는 것이 수준높은 앱을 만드는 기초작업입니다.


결론

  • Python에서 GUI는 PyQt / PySide가 조합이 좋다

  • Python GUI로 모바일 앱개발은 아직 부족하다

     

개인적인 경험에 의한 생각을 정리하였으므로 참조 바랍니다.

감사합니다.

댓글

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기