Skip to main content
파이썬 GUI
PyQt 햝아보기
Dev Rookie JINN
MFC는 너무 불편해…
PyQT?
• QT
The Qt Company에서 개발한 C++ 기반의
오픈소스 크래스 플랫폼 GUI 프레임워크
• PyQT
C++ 기반인 QT를 파이썬에서 사용할 수 있도록 잘~ 포장한 QT의 파이썬 바인딩
왜 QT?
• 멀티 플랫폼 대응
• Window
• Linux
• MacOS
• Embedded Linux
• Andriod
• 기타 등등
• 문서 잘 되어있음
• 레퍼런스 많음
• 다양한 라이브러리 지원 (Network,Web view, DB, Parser 등등)
• QT Creator라는 생각보단 쓸만한? IDE 지원
• QT Designer GUI 에디터로 빠르게 UI 디자인 구성
왜 QT?
• AMD 인터페이스나 배틀넷 런처 등,
다양한 상용 프로젝트들에서도 활용되고있음
• C++ / MFC
빌드/컴파일 O
MS도 노답이라 버림
쓰기 복잡함
디자인 구림
생산성 구림
• 파이썬 / PyQt
빌드/컴파일 X
현재 Qt 6까지 나옴
쉬움
디자인 좋음
생산성 좋음
라이선스
• 오픈소스 라이선스와 상용 라이선스로 나뉨
• GPL v2/v3
유료로 판매시 같이 사용된 모든 소스코드를 공개해야 함
• LGPL v3
라이브러리로 판매시에는 소스코드 공개하지 않아도 됨
• Qt 상용 라이선스는 사용시 로열티 지불
User Interface
Event Driven Programming
EVENT LOOP
Event Event
Event Handler
• Event 프로그램에 감지되는 동작
• Event Loop 루프를 돌면서 이벤트를 받아 Handler로 넘겨줌
• Event Handler 넘겨받은 Event를 처리해주는 함수
Event Loop
Event Handler 전달
Qt GUI 관련 모듈
• Qt Core : 모든 Qt 어플리케이션에 기본 포함
각종 컨테이너와 Iterator 구현 포함
• Qt Widgets : C++기반의 GUI 클래스 모음
• Qt WebEngine : HTML5/CSS/JavaScript를 이용한 웹 UI개발
Qt GUI 관련 모듈
• Qt QML : Qt Quick 모듈에서 사용하는 마크업 언어
• JavaScript V8엔진 사용
• OpenGL, Vulkan등으로 렌더링 됨
• JavaScript 활용 가능하여 생산성이 높고 반응형 UI 구성 용이
• 대신 메모리를 많이 먹고 성능이 많이 떨어짐
• C++ 코드와 Binding 지원
• C++과는 많이 동떨어져있다고함
PyQt 개발환경 셋팅
• 파이썬 3.8.x혹은 3.9.x버전 설치
(https://www.python.org/downloads/)
최신 버전인 3.10은 호환성에 문제가 있는듯…
• 파이썬 IDE 설치 (Pycharm)
https://www.jetbrains.com/ko-
kr/pycharm/download/#section=windows
PyQt 개발환경 셋팅
• PyCharm에서 패키지 설치
or
• 터미널에서
pip install PyQt5
pip install pyqt5designer
UI는 QT디자이너에서
드래그앤 드랍으로 편하게 작업
다만 ObjectName은
파이썬에서 해당 오브젝트 이름으로 접근해
사용하기 때문에 반드시 맞춰줘야함
QT 디자이너에서 작업된 파일은 .ui 확장자로 저장되는데
사실 그냥 XML임
다만 PyQt에서 해당 파일을 로드해 사용할때는
해당 XML을 파싱해 .py 파일로 변경후 import됨
QT 디자이너로 만든 UI 로드
(XML을 py 파일로 파싱해서 로드함)
Qapplication : 위젯의 초기화와 종료 등을 담당하는 객체
모든 QT 어플리케이션은 반드시 유일한 QApplication을 가지고 있음
QApplication객체 생성
위젯 객체 생성
위젯 보여주기
이벤트 루프
ObjectName Signal Slot
Signal / Slot
뭔가 했더니 그냥 단순히 이벤트(Signal)와 콜백(Slot) 함수
이름만 다르게 부르는듯...
QPushButton Class
QAbstractButton Class
QWidget Class
Qwidget: 키보드,마우스 등 이벤트들을 수신하고, 화면에 렌더링하는 역할을 담당한다
QT의 GUI를 구성하는 최소한의 단위이며 모든 요소들은 QWidget을 상속 받는다
• Pyinstaller 설치
pip install pyinstaller
• 패키지 실행
pyinstaller –w –F main.py
-F 실행파일 하나로 생성
-w 콘솔창 띄우지 않음
패키징