Dear Imgui 파이썬 라이브러리(imgui_bundle)
Dear Imgui 는 C++ GUI 라이브러리로 간단하면서도 빠르게 GUI를 개발할 수 있어서 최근 많이 사용되고 있다.
단점은... 개발해놓은 GUI가 별로 예쁘지 않다. 딱 개발자가 사용하기 좋은 GUI 라고 할까?
Imgui 에 대한 파이썬 바인딩은 뭐가 있는지 알아보자.
1) pyimgui
- 가장 오래된 원조격 바인딩
- Dear ImGui C++ 라이브러리를 Python에서 바로 쓸 수 있게 바인딩한 것
- OpenGL, SDL2, GLFW 같은 백엔드랑 같이 사용 가능
- ImPlot이나 ImGuizmo 같은 확장 기능은 따로 제공 안 함
2) imgui_bundle
- 가장 최근 주목받는 고급 통합 버전
- Dear ImGui + ImPlot + ImGuizmo + imgui-knobs + 기타 위젯을 한 번에 제공
- C++ 기능 99% 다 바인딩됨
- 데스크탑 GUI 툴, 데이터 시각화용으로 강추
- 약간 API가 C++ 원본하고 다를 때도 있음 (Cond_ 같은)
3) DearPyGui
- Dear ImGui 철학으로 새로 짠 순수 파이썬 GUI 라이브러리
- C++ 기반이긴 하지만 파이썬 API로 완전 새롭게 설계됨
- 그래프, 테이블, 위젯, 이미지뷰 등 고급 기능 제공
- 코드가 깔끔하고 직관적, 데이터 시각화 앱이나 툴에 많이 씀
정리를 하면 아래와 같다.
라이브러리 | 특징 | 확장기능(ImPlot 등) | 개발스타일 |
pyimgui | C++ ImGui 원본 바인딩 | ❌ | 클래식 |
imgui_bundle | C++ ImGui + ImPlot + 기타 통합 | ✅ | 최신 고급형 |
DearPyGui | 파이썬 친화형 새 설계 | 자체 그래프 모듈 있음 | 직관적, 쉽고 빠름 |
지피티에서는 아래처럼 추천을 하는데...
- 게임 툴/시뮬레이터/복잡한 UI → imgui_bundle
- 빠르게 GUI 프로토타입 만들기 → DearPyGui
- 딱 C++ ImGui 원본 느낌 그대로 → pyimgui
내 생각에는 그냥 imgui_bundle을 쓰는 것이 가장 좋은 것 같다.
ImPlot 같은 확장기능을 그대로 사용할 수도 있기도 해서.
사실.. 약간의 문제는 다른 곳에 있다.
Dear Imgui 자체가 아직 활발히 개발이 진행중이기도 하고, 그에 따른 imgui_bundle 자체도 계속 업그레이드 되고 있어서...
구글 검색이든 쳇지피티에 코드를 물어보든... 옛날 코드나 변경된 API 가 반영이 안된다. ㅠ.ㅠ
즉, 구글 검색한 코드던 쳇지피티에서 알려준 코드던 그 상태로 거의 동작하지 않고 에러가 발생한다.
옛날 스타일대로 제공되는 문서를 읽거나 예제를 보면서 에러를 수정해야 한다.
그래서 빠르게 필수기능만 사용하려고 접근했다가 어려움을 겪을 수 있다.
내가 찾은 한가지 방법은..
imgui_bundle 홈페이지에 보면 "Interactive Manual" 이라고 있다.
밑의 그림을 클릭해서 이동해보면 실제 브라우저에서 동작하는 예제가 나온다.
예제를 둘러보면서 현재 만들려고 하는 것과 가장 비슷한 예제를 찾자.
비슷한 예제를 찾았으면 해당 예제의 이름을 확인하고,
"View on GitHub" 에서 python demo code 를 누르면 python 코드가 나올 것이다.
해당 코드는 실제 동작하는 코드이므로 가장 정확하다고 할 수 있다. (예제 이름을 꼭 확인하자)
그런데 앞에서 예제의 이름을 기억하라고 했다. (위의 그림에서 예제 이름은 "Line Plots" 이다. )
그 이유가... Python demo code를 누르면... 전체 예제 코드가 하나의 파일로 되어 있는 것을 볼 수 있다.
즉 내가 찾는 예제를 다시 파일 내에서 찾아야 한다.
이때 아까의 예제 이름으로 찾으면 관련 예제의 코드가 나온다.
약간 귀찮지만 확인된, 동작하는 코드를 얻을 수 있으니, 수고롭지만 이 방법을 쓰는 것도 괜찮은 것 같다.
이렇게까지 해서 imgui_bundle을 쓰는 이유는...
생각보다 편하다. 생각보다 이미 구현되어 있는게 많다.
속도는 말할 것도 없고.
간단한 개발자용 GUI가 필요하다면 한번쯤 써보는 것을 추천한다.
그럼 이만!!