SlideShare una empresa de Scribd logo
1 de 20
파이썬 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 콘솔창 띄우지 않음
패키징

Más contenido relacionado

Similar a Dev Rookie 파이썬 GUI.pptx

PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기
PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기
PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기덕규 임
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트iFunFactory Inc.
 
Qt 5.10.0 개발환경 구축하기
Qt 5.10.0 개발환경 구축하기Qt 5.10.0 개발환경 구축하기
Qt 5.10.0 개발환경 구축하기jdo
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8sHyoungjun Kim
 
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기iFunFactory Inc.
 
2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리Jay Park
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선NAVER D2
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetesNAVER D2
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료지원 정
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
if kakao dev 2019_Ground X_Session 01
if kakao dev 2019_Ground X_Session 01if kakao dev 2019_Ground X_Session 01
if kakao dev 2019_Ground X_Session 01Klaytn
 
[154] 데이터 센터의 오픈 소스 open compute project (ocp)
[154] 데이터 센터의 오픈 소스 open compute project (ocp)[154] 데이터 센터의 오픈 소스 open compute project (ocp)
[154] 데이터 센터의 오픈 소스 open compute project (ocp)NAVER D2
 
Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Youngtaek Oh
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능Dexter Jung
 
Meetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsMeetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsminseok kim
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.효근 박
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows TerminalOnGameServer
 
Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) VMware Tanzu Korea
 
스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기Jae Sung Park
 

Similar a Dev Rookie 파이썬 GUI.pptx (20)

oVirt introduction
oVirt introduction oVirt introduction
oVirt introduction
 
PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기
PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기
PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
 
Qt 5.10.0 개발환경 구축하기
Qt 5.10.0 개발환경 구축하기Qt 5.10.0 개발환경 구축하기
Qt 5.10.0 개발환경 구축하기
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
 
2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
if kakao dev 2019_Ground X_Session 01
if kakao dev 2019_Ground X_Session 01if kakao dev 2019_Ground X_Session 01
if kakao dev 2019_Ground X_Session 01
 
[154] 데이터 센터의 오픈 소스 open compute project (ocp)
[154] 데이터 센터의 오픈 소스 open compute project (ocp)[154] 데이터 센터의 오픈 소스 open compute project (ocp)
[154] 데이터 센터의 오픈 소스 open compute project (ocp)
 
Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능
 
Meetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsMeetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vs
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
 
Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS)
 
스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기
 

Más de MUUMUMUMU

Recast Detour.pptx
Recast Detour.pptxRecast Detour.pptx
Recast Detour.pptxMUUMUMUMU
 
언리얼 애니메이션.pptx
언리얼 애니메이션.pptx언리얼 애니메이션.pptx
언리얼 애니메이션.pptxMUUMUMUMU
 
이벤트 드리븐.pptx
이벤트 드리븐.pptx이벤트 드리븐.pptx
이벤트 드리븐.pptxMUUMUMUMU
 
언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptx언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptxMUUMUMUMU
 
DevRookie 메모리 최적화.pptx
DevRookie 메모리 최적화.pptxDevRookie 메모리 최적화.pptx
DevRookie 메모리 최적화.pptxMUUMUMUMU
 
DevRookie 언리얼 인터렉션 폴리지.pptx
DevRookie 언리얼 인터렉션 폴리지.pptxDevRookie 언리얼 인터렉션 폴리지.pptx
DevRookie 언리얼 인터렉션 폴리지.pptxMUUMUMUMU
 
DevRookie 언리얼 EQS.pptx
DevRookie 언리얼 EQS.pptxDevRookie 언리얼 EQS.pptx
DevRookie 언리얼 EQS.pptxMUUMUMUMU
 
DevRookie 언리얼 에셋과 패키지.pptx
DevRookie 언리얼 에셋과 패키지.pptxDevRookie 언리얼 에셋과 패키지.pptx
DevRookie 언리얼 에셋과 패키지.pptxMUUMUMUMU
 
DevRookie 언리얼 군중 애니메이션.pptx
DevRookie 언리얼 군중 애니메이션.pptxDevRookie 언리얼 군중 애니메이션.pptx
DevRookie 언리얼 군중 애니메이션.pptxMUUMUMUMU
 
DevRookie 리펙터링.pptx
DevRookie 리펙터링.pptxDevRookie 리펙터링.pptx
DevRookie 리펙터링.pptxMUUMUMUMU
 
DevRookie 플로킹 알고리즘.pptx
DevRookie 플로킹 알고리즘.pptxDevRookie 플로킹 알고리즘.pptx
DevRookie 플로킹 알고리즘.pptxMUUMUMUMU
 

Más de MUUMUMUMU (11)

Recast Detour.pptx
Recast Detour.pptxRecast Detour.pptx
Recast Detour.pptx
 
언리얼 애니메이션.pptx
언리얼 애니메이션.pptx언리얼 애니메이션.pptx
언리얼 애니메이션.pptx
 
이벤트 드리븐.pptx
이벤트 드리븐.pptx이벤트 드리븐.pptx
이벤트 드리븐.pptx
 
언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptx언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptx
 
DevRookie 메모리 최적화.pptx
DevRookie 메모리 최적화.pptxDevRookie 메모리 최적화.pptx
DevRookie 메모리 최적화.pptx
 
DevRookie 언리얼 인터렉션 폴리지.pptx
DevRookie 언리얼 인터렉션 폴리지.pptxDevRookie 언리얼 인터렉션 폴리지.pptx
DevRookie 언리얼 인터렉션 폴리지.pptx
 
DevRookie 언리얼 EQS.pptx
DevRookie 언리얼 EQS.pptxDevRookie 언리얼 EQS.pptx
DevRookie 언리얼 EQS.pptx
 
DevRookie 언리얼 에셋과 패키지.pptx
DevRookie 언리얼 에셋과 패키지.pptxDevRookie 언리얼 에셋과 패키지.pptx
DevRookie 언리얼 에셋과 패키지.pptx
 
DevRookie 언리얼 군중 애니메이션.pptx
DevRookie 언리얼 군중 애니메이션.pptxDevRookie 언리얼 군중 애니메이션.pptx
DevRookie 언리얼 군중 애니메이션.pptx
 
DevRookie 리펙터링.pptx
DevRookie 리펙터링.pptxDevRookie 리펙터링.pptx
DevRookie 리펙터링.pptx
 
DevRookie 플로킹 알고리즘.pptx
DevRookie 플로킹 알고리즘.pptxDevRookie 플로킹 알고리즘.pptx
DevRookie 플로킹 알고리즘.pptx
 

Dev Rookie 파이썬 GUI.pptx

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