Python GUI - DearPyGui 소개
파이썬은 굉장히 자주 쓰이는 언어지만 의외로 GUI에 대해 찾아보면, 최소한 한국어 자료로는 PyQT와 PySide 외에는 나오는 게 없다. tkinter도 보이긴 하지만 대충 살펴보니 디자인도 좋지 않고 기능도 부족해 쓸만해 보이진 않는다. 무엇보다 네이티브 라이브러리보다 많은 사람들이 모여서 만드는 오픈소스 라이브러리가 기능이 많고 커스터마이징이 쉬운 건 거의 일반적으로 적용되는 사실이기에 사실 크게 기대조차 하지 않는다.
내가 알기로 PyQT는 GPL, PySide는 LGPL License이다. LGPL은 GPL을 약화시킨 것으로, LGPL 라이선스 소스코드를 가져다 사용할 경우 소스코드 공개 의무가 없으며 상업적 이용이 가능하다. 하지만 소스코드를 수정해 사용할 경우 공개 의무가 있다고 한다. https://darkpgmr.tistory.com/89 을 참고하자. 나도 라이선스를 직접 읽어본 것은 아니고 블로그 글을 참고한 거라 정확하지 않을 수도 있다.
DearPyGUI?
일단 PyQT는 많이 알려져 있어도 DearPyGUI는 많이들 모를 것 같다.
나도 최근 우연히, NERF 계열 연구물(DreamFusion, instant-ngp 파생) 툴킷을 보다가 GUI로 DearPyGUI을 쓴다길래 살펴보다 이 글을 쓰게 됐다.
https://www.reddit.com/r/Python/comments/q75h30/dear_pygui_v_100/
일단 위 글에 소개글이 있는데, v1.0.0 소개글이 2021년에 올라올 정도면 개발한 지는 오래되지 않아 보인다. 실제로 첫 커밋을 확인해보니 2020년 5월로, 개발한지는 얼마 지나지 않았다고 할 수 있다.
소개 글에서는 이런 장점을 소개한다.
High level features of Dear PyGui
- MIT license
- Fast, GPU-based rendering (written in C/C++)
- Modern look with complete theme and style control
- Programmatically control (nearly) everything at runtime
- Simple built-in Asynchronous function support
- Built-in developer tools: logging, theme inspection, resource inspection, runtime metrics, documentation, demo
70+ widgets with hundreds of widget combinations - Cross-platform (Windows, Linux, MacOS)
- Easy to install (pip install dearpygui)
Functionality of Dear PyGui
- Menus
- Variety of widgets, sliders, color pickers, etc.
- Tables
- Drawing
- Fast and interactive plotting / charting
- Node editor
- Theming support
- Callbacks and handlers
가장 첫 줄, MIT License만 읽어도 써먹을 이유가 충분하다는 걸 알 수 있다.
MIT License에서 짐작할 수 있겠지만, DearPyGUI는 Github에 공개되어 누구나 기여할 수 있다.
https://github.com/hoffstadt/DearPyGui
Kivy, PyQT 등과의 간략한 비교도 https://www.reddit.com/r/Python/comments/q75h30/comment/hggwuxw/?utm_source=share&utm_medium=web2x&context=3 에 들어있으니 참고하자.
Example
import dearpygui.dearpygui as dpg
def save_callback():
print("Save Clicked")
dpg.create_context()
dpg.create_viewport()
dpg.setup_dearpygui()
with dpg.window(label="Example Window"):
dpg.add_text("Hello world")
dpg.add_button(label="Save", callback=save_callback)
dpg.add_input_text(label="string")
dpg.add_slider_float(label="float")
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
github에 공개되어 있는 예시인데, 텍스트, 버튼, 인풋, 슬라이더 생성만 해도 PySide보다 훨씬 간단하게 할
수 있음을 볼 수 있다.
PyQT vs. PySide vs. DearPyGui
PyQT와 PySide는 사실 기능상 크게 차이가 나지 않고, 라이선스 차이 때문에 둘 중 어느 것을 쓸 지 갈리는 듯하다. PySide6가 라이선스가 더 관대하기에 PySide6와 DearPyGui를 비교하면 되겠다.
PySide6와 DearPyGui를 비교하면 위에서 사실 이미 다 말했지만,
- LGPL vs MIT로, DearPyGUI 쪽이 라이선스는 훨씬 관대하다.
- 위 소스코드 예제를 보면 알겠지만 DearPyGUI쪽이 간단한 GUI 만들기는 훨씬 간단하다.
나처럼 GUI는 그다지 중요하지 않고 개발자들이나 연구자들이나 쓰는 GUI 만드는 사람은 DearPyGUI 이용해 빠르게 노력 들이지 않고 만드는 게 좋을 것 같고, GUI 기능과 디자인 등이 중요한 사람은 더 상세히 알아보는 편이 좋겠다. 개인적으로 디자인은.. PySide6에 qt-materials 적용했을 때가 dearpygui보다 나은듯..
내가 잠깐 알아보며 한번씩 키워드로 보였던 라이브러리들은 아래와 같다. 필요한 사람은 조사할 때 참고하자.
- PyQT, PySide
- DearPyGUI
- PySimpleGUI
- KivyMD
또 터미널에서 interactive application, TUI(Text User Interface)을 만드는 데 쓸 수 있는 textual이라는 것도 있다.
https://github.com/Textualize/textual
이게 터미널 화면이라고 한다. 그저 놀라울 뿐이다.. 마찬가지로 MIT License이다.