본문 바로가기

Python

ImGUI vs PySide6

파이썬에서 GUI 프로그램을 할 때, 어떤 라이브러리를 쓸 지 고민하게 된다. 

보통 많이 쓰는 라이브러리로는 PyQT, tkinter, wxPython 정도가 나오기는 한다. 

 

지피티에게 최근에 파이썬 GUI 로 유명한 것 5가지만 알려달라고 해보자. 

 파이썬 GUI 라이브러리 Top 5

1️⃣ PyQt / PySide

  • Qt 프레임워크의 파이썬 바인딩
  • PyQt와 PySide는 거의 비슷하지만 라이선스 정책 차이 있음
    (PySide는 LGPL, PyQt는 GPL/상용)
  • 데스크탑 앱 개발에 가장 많이 씀
  • Qt Designer로 시각적인 UI 설계 가능
  • 다양한 위젯, 네트워크, OpenGL, 데이터베이스 기능 포함

🔍 대표 앱: Anki, Calibre


2️⃣ Tkinter

  • 파이썬 표준 라이브러리
    (추가 설치 없이 바로 사용 가능)
  • 간단한 GUI 프로그램 제작에 적합
  • 윈도우, macOS, 리눅스 지원
  • 기능이 제한적이고 스타일이 약간 구식

🔍 대표 앱: 교육용 툴, 간단한 툴 제작


3️⃣ Kivy

  • 크로스 플랫폼 지원 (PC, 모바일, 라즈베리파이)
  • GPU 가속 UI 가능
  • 터치 스크린, 멀티터치 지원
  • 디자인이 모던하고 동적인 UI 제작 가능

🔍 대표 앱: 모바일 앱 프로토타입, 키오스크 UI


4️⃣ Dear ImGui (pyimgui)

  • Immediate Mode GUI 방식
  • 게임 툴, 실시간 디버깅 툴, 시뮬레이터 UI
  • 초고속 렌더링, 오픈GL/DirectX/Metal/Vulkan 연동 가능
  • 데스크탑 앱 용도보단 툴 내장 UI용으로 많이 씀

🔍 대표 앱: 인게임 디버그 창, 시뮬레이터 툴


5️⃣ wxPython

  • wxWidgets의 파이썬 바인딩
  • 네이티브 시스템 위젯을 사용해서 OS에 맞는 UI 제공
  • 크로스 플랫폼
  • PyQt보단 덜 알려져 있지만 꾸준히 쓰임

🔍 특징: 윈도우 네이티브 UI에 가까운 데스크탑 앱 제작 가능


📊 정리

라이브러리특징용도
PyQt/PySide 풍부한 위젯, 네이티브 UI 데스크탑 앱
Tkinter 가벼움, 기본 내장 간단한 툴
Kivy GPU 가속, 크로스 플랫폼 모바일/터치 앱
Dear ImGui 즉시모드, 초고속 게임/툴 UI
wxPython 네이티브 위젯 데스크탑 앱
 

흠. 잘 알려주는데, 오늘은 1번 PyQT/PySide와 4번 ImGUI를 좀 더 자세히 보기로 하자. 

 

일단 PyQT는 라이센스 문제로 인해 상용프로그램 개발에서는 가능하면 제외하게 되고, 그와 유사한 PySide6를 선택하게 된다. PyQT나 PySide나 무거운 면이 있다. 즉, 실제 프로그램 시작할 때나 동작시킬 때 느린 경우가 종종 있다. 

 

ImGUI (아이엠지유아이 라고 읽는다)는 가볍고 빠르게 개발이 가능하다는 장점이 있는데, 문제는... UI자체가 이쁘게 나오지 않는 것 같다. 물론 기능 동작에만 집중하는 경우라면 동작하는게 핵심이지 UI가 이쁜게 무슨 문제겠냐만, 기왕이면 다홍치마라고 UI가 이쁘면 좋기는 한 것 같다. 그런면에서 ImGUI는 실무 개발진에게 빠르게 테스트 용을 만들때 좋은 것 같다. 

 

좀 더 자세히 알아보면 아래와 같다. 

 

📌 ImGui (Dear ImGui)

Immediate Mode GUI 라이브러리

  • C++ 기반이지만, Python 바인딩(pyimgui 등)도 있어요.
  • 게임 엔진, 시뮬레이터, 툴 개발에 많이 쓰임.
  • 렌더링 루프에 포함되어 매 프레임 UI를 그려줌.
  • 사용법이 단순하고 직관적임. 코드를 보면:
if (ImGui::Button("Click Me")) {
    // 버튼 눌렀을 때 동작
}
  • UI 상태가 매 프레임 새로 갱신되므로, 상태를 따로 관리할 필요가 적음.
  • 렌더링을 직접 OpenGL/DirectX/Vulkan으로 연결 가능.
  • 기본적으로 윈도우 시스템 독립적 (윈도우 창 관리, 메뉴바 같은 OS 네이티브 UI는 없음)
  • 스타일이 개발툴/디버깅 툴 같은 느낌 (매끈한 상업용 앱 UI와는 거리가 있음)
  • 주로 런타임 디버깅 툴, 프로토타입, 인게임 UI 등에 활용.

✅ 장점

  • 매우 빠르고 가벼움.
  • 코드에 직접 UI 선언 가능.
  • 렌더링 엔진과 잘 통합됨.

❌ 단점

  • 일반적인 데스크탑 앱 UI에는 부적합.
  • 네이티브 위젯 (파일 다이얼로그, 트레이 아이콘 등) 없음.
  • 마우스/키보드 이벤트를 직접 처리해야 함.

📌 PySide6

Qt의 Python 바인딩

  • Qt 프레임워크를 Python에서 사용 가능.
  • 상태 기반(Immediate Mode가 아님) GUI
  • 위젯 기반 GUI (버튼, 리스트, 테이블, 그래프 등)
  • 네이티브 느낌의 데스크탑 앱을 쉽게 만들 수 있음.
  • 윈도우, macOS, 리눅스 모두 지원
  • QML을 활용하면 GPU 가속 UI도 가능
  • Qt Designer로 GUI 시각적으로 설계 가능

✅ 장점

  • 강력한 데스크탑 앱 개발 가능.
  • 네이티브 느낌의 다양한 위젯 제공.
  • 이벤트 및 상태 관리 시스템이 체계적.
  • 다국어 지원, 네트워크, OpenGL, 스레드, 데이터베이스 등 기능 풍부.

❌ 단점

  • 상대적으로 무겁고 복잡.
  • 실행 속도가 ImGui보다 느림.
  • 렌더링 엔진과의 직접 통합에는 부적합.

📊 둘의 차이 정리

항목ImGuiPySide6
방식 Immediate Mode GUI Retained Mode GUI (상태 기반)
주요 용도 게임 툴, 런타임 디버깅, 임베디드 툴 데스크탑 애플리케이션
렌더링 직접 렌더링 엔진 통합 (OpenGL 등) 네이티브 시스템 창
속도 매우 빠름 상대적으로 느림
UI 스타일 개발툴/디버그용 UI 네이티브 또는 커스텀 UI
이벤트 처리 수동 처리 필요 Qt 이벤트 시스템
Python 바인딩 pyimgui 등 공식 PySide6
 

📌 정리

  • 게임/시뮬레이션 툴, 실시간 디버깅/개발툴ImGui
  • 일반 데스크탑 애플리케이션, 데이터 시각화 앱, 유틸리티 앱PySide6

결국 어떤 어플리케이션을 만드느냐의 문제인데... 

  • 난 빠르게 동작하는 것을 보고 싶다 --> ImGUI 
  • 기왕이면 GUI가 예쁘면 좋겠다. --> PySide6

를 선택하면 될 것 같다. 

 

참고로 둘 다 처음 학습에 많이 어렵지는 않은 것 같다. 

단, 무조건 처음에는 간단한 어플리케이션부터 시작해보자. 

 

그럼 이만.