|
파이썬은 파이썬처럼 쓰자
- 파이썬의 강점은 필요한 기능을 신속하게 구현하는 데 있다.
- 락 솔리드 멀티 스레딩은 고, 팬시한 모바일 앱은 플러터, 거대하고 정교한 올라운드 플레이어는 C...
등가교환의 법칙
- 기능의 숫자에 비례해서 학습곡선의 경사가 사악하게 올라간다.
- 배우기 쉽다는 건 구현 범위가 좁다는 것이고, 나중에 세부조정을 못해서 낭패를 볼 확률이 높다.
- 버뜨 이것저것 다 할 수 있는 프레임워크를 택하면 공부하다 지쳐서 코딩을 포기할 수도 있다.
바인딩 vs 독자 프레임워크
- 코드 성숙도, 안정성, 제공하는 기능의 양을 고려하면 -> QT처럼 오래된 프레임워크의 바인딩을 택하는 게 낫겠다.
- 버뜨 이미지매직의 무력함과 그에 대비되는 필로우의 속도를 보면 이게 꼭 항상 맞는 것도 아니다.
- Kivy처럼 첨부터 파이썬을 위해 만든 프레임워크와의 궁합이 더 좋은 게 당연하니 -> 이런 독자 프레임워크를 써서 코딩 효율을 올리는 게 이득일 수도 있다.
사용자만 보면 Kivy와 PyQt 양강 구도.
- wx가 예상외로 저조해서 의아했는데, 생각해보니 어정쩡한 포지션 때문인 듯.
- 기능이나 룩앤필이나 wx가 Qt에 비해 우위를 점하는 부분이 없어...
각각의 장단점
* 네이티브 플랫폼 룩앤필은 사람에 따라 단점으로 볼 수도 있겠지만, 대책없는 촌스러움을 피할 수 있다는 점에서 장점으로 분류.
Tk
- 파이썬 기본 탑재 -> 평범한 gui 인터페이스를 만들 땐 최적의 선택. 연륜에서 나오는 안정성
- but 오래된 연식의 투박함과 촌스러움
Qt 바인딩
- 대세. 많은 기능과 예쁜 모양, 폼 디자이너. 전부터 KDE와 QML에도 관심이 있었음.
- but 알맹이는 C++
Kivy
- 바인딩이 아닌 독자 프레임워크. 처음부터 파이썬용. GPU 가속
- but 폼 디자이너 부재. 멀티터치 말고 안드로이드에서 쓸 게 없음.
wx위젯 바인딩
- 각 플랫폼의 네이티브 룩앤필 구현, 다수의 폼 디자이너
- but 이것도 알맹이는 C++
imgui 바인딩
- 급상중인 신예. 독특한 패러다임. GPU 가속
- but 알맹이는 C++
pygLet
- 바인딩이 아닌 독자 프레임워크. ffmpeg까지 쓰는 멀티미디어 지원. OpenGL
- but 아직도 마이너. 모바일 지원은 X
PySimpleGUI
- 심플한 만큼 쉽다. 취향에 맞는 바인딩을 선택할 수 있다.
- but 이것저것 다 지원될 것 같지만 tk 빼고 나머지는 개발중이라고 봐야 함.
- 그나마 tk도 파이썬 3.8부터는 문제가 있는 듯 하고, 아두이노처럼 무식하게 이벤트 루프를 돌리는 것도 맘에 안 듬
BeeWare Project를 선택한 이유
- 독자적인 Python native "Python first" framework
- 브리프 케이스(자체 패키징 툴)와 토가
- 장인정신?
- 귀여운 땡벌 마스코트, 부루투스
____이젠 pyinstaLLer가 업계 표준처럼 쓰이지만, 알수없는 에러 때문에 난처하다는 보고도 계속되고 있다. 다른 프레임워크의 gui가 토가보다 더 좋을 수는 있지만, 브리프 케이스 처럼 프레임워크의 자체 패키징 툴이 있는 경우는 전무하다.
____미쳤다 싶을 정도로 매달린다. (지금은 아니지만) 안드로이드 구현에 파이썬을 자바 코드로 바꿔주는 방법까지 동원했다는 얘기에 묘한 공감을 하게 되었다. 파이썬 재단에서 무슨 상금도 받았다는데...
____개발 초기단계라서 윈도우에선 아직 구현이 안 된 기능이 있을 정도. 하지만 이런 아슬아슬한 희망고문이 또 내 취향이라서...
** **
1. 바인딩
- C++ 프레임워크 바인딩 VS 독자 프레임워크 인가?
2. 패키징
- pyinstaLLer 가능 여부 & 자체 패키징
3. 모바일 지원
- Android, iOS 를 지원하는가?
- 대부분 Linux, Windows, OS X 는 기본으로 지원하며,
- 리눅스가 지원되면 라즈베리도 가능하다고 봐야할 듯
4. 룩&필
- OS 독립적인가, OS종속적인가?
Framework Comparison
Widget PyGui Tk PyQt Kivy
drag O X O X
pLot O X O X
menus O O O X
____________Tkinter____________
- part of python, nothing extra to download/ thin object-oriented layer on top of Tcl/Tk
- Linux, OSX, Windows
- Uses native widgets on the mac and windows.
- 구관인가, 명관인가? 오래된 만큼 안정성은 인정하는 분위기..
- Tk는 Toolkit의 약자 /“Tk interface”
- Sometimes hard to debug in that Tkinter widgets at their core aren't python objects; tkinter provides a wrapper around the actual tk widgets which sometimes means you get weird error messages.
- Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language
____________guizero____________ 2017-12-19 ~ 2019-10-25/ star 189
- Tkinter based
- Windows, MacOS, Linux
____________Kivy____________
- kivy is only available in Python
- for Windows using PyInstaller/ .spec 파일 수정?
- Android, iOS/ Linux, Windows, OS X and Raspberry Pi
- GPU Accelerated/ The graphics engine is built over OpenGL ES 2
- kivy? Kivy?
- widgets are entirely custom and look the same across all platforms
- 멀티터치 지원
- Kv design language 템플릿 언어
- Kivy Designer is essentially unmaintained and unsupported
- Qt Designer?
____________PyQt5____________
- binding of Qt5 C++ a gui framework
- iOS, Android/ all platforms that support Qt, such as Windows, OS X, Linux,
- PyQt library is available in other programming languages such as C++
- More than just a GUI framework
Qt wraps several native platform APIs for networking, databases, etc. and provides standardized access to them through a single API - one codebase can cater to many platforms and perform the same across them.
- No Python-specific documentation on classes in PyQt5
PyQt5's documentation links to its Qt counterpart, which is in C++. This can be confusing for someone without a background in C++ or experience with Qt.
- Qt, PyQt, KDE and PyKDE
- Qt Designer
____________PyQt____________
- pyqtdeploy is a tool for deploying PyQt applications. It supports deployment to desktop platforms (Linux, Windows and macOS) and to mobile platforms (iOS and Android)
- https://riverbankcomputing.com/
____________Qt for Python (aka PySide2)____________
- QT로부터 정식 간택? / official set of Python bindings supported by the Qt Company
- Similar to PyQt, you need a C++ background. at least you can read C++ code
Qt's document is poor, and Qt for Python(PySdie) is even worse. this document assumes that you are already familiar with Qt. if you want to customize a Widget, you need to look at the Qt C++ source code to know what to do.
- Traditional, complex C++ GUI framework wrapped in Python. Not very Pythonic.
- QtQuick/QML
- Tkinter, PyGTK, wxPython 등이 있지만 PyQt, PySide가 가장 세련된 결과물을 보여준다고 평가받고 있다. Tkinter는 Python Foundation 공식 기본 라이브러리인데도 플랫폼에 따라서 레이아웃이 조금씩 변형되고, 그나마 멀쩡하게 출력되어도 모습이 투박한 등 못써먹을 물건 취급이다.
____________guietta____________ 2020-05-09 ~ 2020-10-05/ star 1.6k
- uses the 'PySide2' QT5 binding by default/ actually a thin wrapper over QT
- PyInstaller/ Please note that PyInstaller is an independent project and we cannot give any guarantee
- 아마도 Windows, Linux, MacOS
- Layout GUI with code/ Super fast GUI layout using Python lists and strings
- queue-like mode (a la PySimpleGUI)
____________Qt____________
- '큐트'라고 읽는다. C++와 QML이라는 자체 스크립트 언어를 기반으로 한다
- QML? It's like CSS+Javascript
- it does not use native widgets, and instead creates approximations of widgets depending on what OS it detects
____________wxPython____________
- wxWidgets / wrap the GUI components of the popular wxWidgets
- pyinstaLLer ?
- Microsoft Windows, Mac OS X and macOS, and Linux or other unix-like systems with GTK2 or GTK3
- In most cases the native widgets are used on each platform to provide a 100% native look and feel
- GUI development IDEs targeted at wxPython/ wxFormBuilder, wxDesigner, wxGlade, BoaConstructor, gui2py
____________Gooey____________ 2015-06-05 ~ 2020-06-22/ star 10.4k
- wxPython ?
- pyinstaller version is to drop this build.spec into the root directory of your application
- Turn (almost) any Python command line program into a full GUI application with one line
- a simple decorator on whichever method has your argparse declarations
- 코맨드 옵션만 갖고 gui를 구성. 딱 한 줄만 추가하면 뭐든 보이긴 한다는 점은 참신한데...
____________wxWidgets____________
- C++ library
- Windows, macOS, Linux and other platforms
- has popular language bindings for Python, Perl, Ruby and many other
- truly native look and feel because it uses the platform's native API
____________DearPyGui____________ 2020-07-24 ~ 2020-10-07/ star 2.2k
- wrapping of Dear ImGui
- I can now compile DearPyGui with pyinstaller
- GPU Accelerated/ does not use native widgets, but instead draws the widgets using your computer's GPU
- Windows 10/ DirectX 11, macOS/ MetaL, Linux/ OpenGL3
- uses the immediate mode paradigm allowing for extremely dynamic interfaces
____________pyimgui____________ 2017-08-10 ~ 2020-07-21/ star 424
- for dear imgui/ Cython-based Python bindings
- Windows (32bit & 64bit)/ Linux (32bit & 64bit)/ OS X (universal build)
____________bimpy____________ 03-14
- bindings to dear imgui
- python module that provides bindings to dear imgui and distributed as a self-contained package bundled with glfw and gl3w
____________Dear ImGui____________
- a bloat-free graphical user interface library for C++. It outputs optimized vertex buffers that you can render anytime in your 3D-pipeline enabled application. It is fast, portable, renderer agnostic and self-contained (no external dependencies).
____________toga / Beeware____________
- Briefcase
- Cross-platform with real native widgets
- building Python applications across different platforms, both desktop and mobile
- Some features are missing and the API isn't that stable yet.
- last year the Python Software Foundation awarded the BeeWare project a $50,000 grant to bring its level of Android support up to par with its tools for iOS
- We're working on Windows support, but not all features and widgets are supported. At a minimum, you'll need Python 3 and .NET Framework 4.
____________pygLet____________ 2007-11-12 ~ 2020-06-21/ star 578
- No external dependencies/ written entirely in pure Python
- This makes it easy to package your project with freezers such as PyInstaller
- Windows, MacOS, Linux
- provides real platform native windows
- windowing and multimedia library that heavily uses OpenGL
- Built-in support for images and audio/ can optionally use FFmpeg
____________PySimpleGUI____________
- Wraps tkinter, Qt (pyside2), wxPython and Remi (for browser support)
- PyInstaller
- Win, Mac, Linux, Pi/ Android devices running PyDroid3, Trinket
- The Non-OO and Non-Event-Driven Model
- The way PySimpleGUI got around events was to utilize a "message passing" architecture instead.
- No callback functions. You do not need to write the word class anywhere in your code.
- Extremely easy to learn
- Works with Qt Designer
- Warning - tkinter + Python 3.7.3 and later, including 3.8 has problems
* March 2020 - Still not quite sure if all issues have been ironed out with tkinter in the 3.7 and 3.8 releases.
tkinter - Fully complete
Qt using Pyside2 - Alpha stage. Not all features for all Elements are done
WxPython - Development stage, pre-releaser. Not all Elements are done. Some known problems with multiple windows
Remi (Web browser support) - Development stage, pre-release.
____________PyGObject____________
- bindings for GObject based libraries such as GTK, GStreamer, WebKitGTK, GLib, GIO and many more
- https://pygobject.readthedocs.io/en/latest/packagingguide.html#packaging-guide
- Linux, Windows and macOS
____________Libavg____________
- Linux, Mac OS X and Windows
- for media-centric applications
- uses modern OpenGL for display outpu
____________Pyforms____________ 2018-08-09 ~ 2019-08-20 / star 88
- based on PyQt, OpenGL
- Style and layout with CSS
____________Wax____________ ~ 2008-05-12
- sits atop wxPython
- Win32, Linux w/ GTK, and macOS/OSX w/ Carbon
[Platform-specific Frameworks]
____________pywin32____________ 2007-07-09 ~ 2020-06-13/ star 2.6k
- Win32 API
____________Chaquopy____________
- android
- A plugin for Android Studio's Gradle-based build system. Supports embedding Python code within a regular Java/Kotlin app, or writing an app entirely in Python with full access to the Android API
- provides build tools for both including Python code in Java applications, and building apps entirely in Python