SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
PyQt로 만드는 

웹기반 데스크탑 어플리케이션
임덕규 (hong18s@gmail.com)
안녕하세요.

임덕규 입니다.
PyCon 2015

업무에서 빠르게 만들어 

사용하는 PyQt 프로그래밍 

PyCon 2017

예제로 살펴보는 PyQt

https://www.youtube.com/watch?v=UHqZMRbHcvc
https://www.youtube.com/watch?v=YUdlGBAPNrU
발표 구성

이 발표를 왜 하게 되었나

QWebEngine 

QWebChannel

시연 영상

질문과답변
발표 이해를 위한 사전 지식

Python

PyQt

Web(HTML, CSS, Javascript)
opentutorials.org

예제로 배우는 PyQt

https://opentutorials.org/module/544

예제 코드는 GitHub를 통해서 모두 공개

https://github.com/RavenKyu/OpenTutorials_PyQt
자바스크립트 생태계의 빅뱅
크로스 플랫폼 데스크탑 앱의 등장

Electron, 그 외...
수 많은 

웹디자이너와 웹개발자가 만들어낸 

환상의 콜라보를 꽁으로

우리가 같이 쓸 수 없을까?
PyQt

Python 사용

상대적으로 나쁘지 않은 개발환경

크로스 플랫폼 지원

지난 세대 디자인

부족한 위젯 모듈
PyQt + Web 으로 무엇을 할 수 있을까?

데이터 분석은 파이썬, 표현은 웹

기존 웹을 설치형 앱으로 전환

웹 라이브러리를 이용한 데스크탑 앱 개발
PyQt에서 Blockly 사용하기
QtWebEngine

Web을 보여줄 수 있는 Qt Widget

Qt4, Qt5 이후에도 빠르게 변하고 있는 모듈

예제 코드

https://github.com/RavenKyu/OpenTutorials_PyQt/blob/master/QtFramework/QtWidgets/QWebEngineView/
QWebEngineView_00_basic.py
Chrome을 통한 웹 디버깅

QtWebEngine은 크로미움 기반

실행시 옵션 추가 또는 코드 추가

sys.argv.append("--remote-debugging-port=8000")
간단한 웹브라우져 만들기

네비게이션바, 웹 표출단, 상태바

탭기능, 다운로드페이지, 즐겨찾기, 개발자 도구 

예제 코드

https://github.com/RavenKyu/OpenTutorials_PyQt/blob/master/QtFramework/QtWidgets/QWebEngineView/
QWebEngineView_03_simple_web_browser.py
웹 요청 처리

새 창, 탭 생성 요청 예제코드

닫기 요청 예제코드

다운로드 요청 예제코드

프린터 사용 요청 예제코드

Flash 사용 허가 예제코드

경고창 변경 예제코드

각 웹 요청 처리 코드를 위해서 

QWebEngineView 상속을 하거나 시그널 처리 또는 자바스크립트 코드를 강제 삽입해야 한다.
QWebChannel

PyQt와 Web을 서로 이어주는 역할

데이터를 전달하고 기능을 호출할 수 있다.

예제 코드

https://github.com/RavenKyu/OpenTutorials_PyQt/blob/master/QtFramework/QtWidgets/QWebEngineView/
QWebEngineView_02_WebChannel.py
QWebChannel 동작 개요
qwebchannel.js
호출
기능
HTMLQWebEngineView QObject
QWebChannel Handler
호출
기능
웹을 불러온 이후 웹에 

QWebChannel 삽입하기

웹브라우저 사용과 아닌 경우를 분리

예제 코드

https://github.com/RavenKyu/OpenTutorials_PyQt/blob/master/QtFramework/QtWidgets/QWebEngineView/
QWebEngineView_07_print_request.py
QWebChannel에서 

사용되는 데이터 타입

QJsonValue ,QJsonDocument 

타입을 지키지 않으면 데이터를 주고 받을 수 없다.

예제 코드

https://github.com/RavenKyu/OpenTutorials_PyQt/blob/master/QtFramework/QtWidgets/QWebEngineView/
QWebEngineView_09_WebChannelDataType.py
질문과 대답

hong18s@gmail.com 또는

https://opentutorials.org/module/544 에서 

해당 토픽 댓글에 질문 부탁드립니다.

시간 관계상 담지 못했던 것

컨택스트 메뉴 변경

QtDesigner 위젯 Promote와 고찰

pyinstaller를 통한 패키징
PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기

Contenu connexe

Tendances

SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてt-sin
 
PDPC法(過程決定計画図)
PDPC法(過程決定計画図)PDPC法(過程決定計画図)
PDPC法(過程決定計画図)博行 門眞
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とdo_aki
 
나도 할 수 있다 오픈소스
나도 할 수 있다 오픈소스나도 할 수 있다 오픈소스
나도 할 수 있다 오픈소스효준 강
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴Takuto Wada
 
運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうか運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうかMasahito Zembutsu
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングYuichi Ito
 
20171005 告白に学ぶ http status code
20171005 告白に学ぶ http status code20171005 告白に学ぶ http status code
20171005 告白に学ぶ http status codeShinichi Takahashi
 
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIRedmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIGo Maeda
 
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミングJavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミングKent Ohashi
 
RedisConf17- durable_rules
RedisConf17- durable_rulesRedisConf17- durable_rules
RedisConf17- durable_rulesRedis Labs
 
Automating your mac farm for iOS build and automation
Automating your mac farm for iOS build and automationAutomating your mac farm for iOS build and automation
Automating your mac farm for iOS build and automationMikhail Advani
 
Redmineプラグイン導入・開発入門
Redmineプラグイン導入・開発入門Redmineプラグイン導入・開発入門
Redmineプラグイン導入・開発入門Minoru Maeda
 
俺も!KPTA 公開用
俺も!KPTA 公開用俺も!KPTA 公開用
俺も!KPTA 公開用ESM SEC
 
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~ESM SEC
 
ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )Kohei Nakamura
 
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfukLaravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfukShohei Okada
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Aree Oh
 
UiPath Test Suite の魅力とは?-続編-
UiPath Test Suite の魅力とは?-続編-UiPath Test Suite の魅力とは?-続編-
UiPath Test Suite の魅力とは?-続編-JunShiomi
 

Tendances (20)

SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
 
PDPC法(過程決定計画図)
PDPC法(過程決定計画図)PDPC法(過程決定計画図)
PDPC法(過程決定計画図)
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
나도 할 수 있다 오픈소스
나도 할 수 있다 오픈소스나도 할 수 있다 오픈소스
나도 할 수 있다 오픈소스
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
 
運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうか運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうか
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
 
系統程式 -- 第 2 章
系統程式 -- 第 2 章系統程式 -- 第 2 章
系統程式 -- 第 2 章
 
20171005 告白に学ぶ http status code
20171005 告白に学ぶ http status code20171005 告白に学ぶ http status code
20171005 告白に学ぶ http status code
 
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIRedmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
 
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミングJavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
 
RedisConf17- durable_rules
RedisConf17- durable_rulesRedisConf17- durable_rules
RedisConf17- durable_rules
 
Automating your mac farm for iOS build and automation
Automating your mac farm for iOS build and automationAutomating your mac farm for iOS build and automation
Automating your mac farm for iOS build and automation
 
Redmineプラグイン導入・開発入門
Redmineプラグイン導入・開発入門Redmineプラグイン導入・開発入門
Redmineプラグイン導入・開発入門
 
俺も!KPTA 公開用
俺も!KPTA 公開用俺も!KPTA 公開用
俺も!KPTA 公開用
 
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~
 
ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )
 
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfukLaravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정
 
UiPath Test Suite の魅力とは?-続編-
UiPath Test Suite の魅力とは?-続編-UiPath Test Suite の魅力とは?-続編-
UiPath Test Suite の魅力とは?-続編-
 

Similaire à PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기

PyCon 2017 예제로 살펴보는 PyQt
PyCon 2017 예제로 살펴보는 PyQtPyCon 2017 예제로 살펴보는 PyQt
PyCon 2017 예제로 살펴보는 PyQt덕규 임
 
2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리Jay Park
 
Dev Rookie 파이썬 GUI.pptx
Dev Rookie 파이썬 GUI.pptxDev Rookie 파이썬 GUI.pptx
Dev Rookie 파이썬 GUI.pptxMUUMUMUMU
 
[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...
[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...
[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...Byungjin Park
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반BJ Jang
 
2020년 10월 10일 개발자 이야기
2020년 10월 10일 개발자 이야기2020년 10월 10일 개발자 이야기
2020년 10월 10일 개발자 이야기Jay Park
 
Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Youngtaek Oh
 
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
 
2020년 5월 16일 개발 이야기 정리
2020년 5월 16일 개발 이야기 정리2020년 5월 16일 개발 이야기 정리
2020년 5월 16일 개발 이야기 정리Jay Park
 
2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리Jay Park
 
137 deview
137 deview137 deview
137 deviewNAVER D2
 
Popular Convention 개발기
Popular Convention 개발기Popular Convention 개발기
Popular Convention 개발기JeongHun Byeon
 
2013 ces_rrecap_Little Big Heroes
2013 ces_rrecap_Little Big Heroes2013 ces_rrecap_Little Big Heroes
2013 ces_rrecap_Little Big HeroesD:rink
 
2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기Jay Park
 
2020년 9월 19일 개발자 이야기
2020년 9월 19일 개발자 이야기2020년 9월 19일 개발자 이야기
2020년 9월 19일 개발자 이야기Jay Park
 
WebRTC 전망 최진호_webappscamp
WebRTC 전망 최진호_webappscampWebRTC 전망 최진호_webappscamp
WebRTC 전망 최진호_webappscampBlisson Choi
 
GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기Young-Ho Cha
 

Similaire à PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기 (20)

PyCon 2017 예제로 살펴보는 PyQt
PyCon 2017 예제로 살펴보는 PyQtPyCon 2017 예제로 살펴보는 PyQt
PyCon 2017 예제로 살펴보는 PyQt
 
2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리2020년 7월 19일 개발 이야기 정리
2020년 7월 19일 개발 이야기 정리
 
Dev Rookie 파이썬 GUI.pptx
Dev Rookie 파이썬 GUI.pptxDev Rookie 파이썬 GUI.pptx
Dev Rookie 파이썬 GUI.pptx
 
[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...
[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...
[GDG DevFest Seoul 2017] JAMstack이 GitHub와 CloudFlare를 만날 때 고성능 웹 어플리케이션 호스팅은...
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반
 
2020년 10월 10일 개발자 이야기
2020년 10월 10일 개발자 이야기2020년 10월 10일 개발자 이야기
2020년 10월 10일 개발자 이야기
 
16 1 상속과super()
16 1 상속과super()16 1 상속과super()
16 1 상속과super()
 
Portfolio
PortfolioPortfolio
Portfolio
 
Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템
 
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
 
Webtech
WebtechWebtech
Webtech
 
2020년 5월 16일 개발 이야기 정리
2020년 5월 16일 개발 이야기 정리2020년 5월 16일 개발 이야기 정리
2020년 5월 16일 개발 이야기 정리
 
2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리2020년 4월 18일 개발 이야기 정리
2020년 4월 18일 개발 이야기 정리
 
137 deview
137 deview137 deview
137 deview
 
Popular Convention 개발기
Popular Convention 개발기Popular Convention 개발기
Popular Convention 개발기
 
2013 ces_rrecap_Little Big Heroes
2013 ces_rrecap_Little Big Heroes2013 ces_rrecap_Little Big Heroes
2013 ces_rrecap_Little Big Heroes
 
2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기
 
2020년 9월 19일 개발자 이야기
2020년 9월 19일 개발자 이야기2020년 9월 19일 개발자 이야기
2020년 9월 19일 개발자 이야기
 
WebRTC 전망 최진호_webappscamp
WebRTC 전망 최진호_webappscampWebRTC 전망 최진호_webappscamp
WebRTC 전망 최진호_webappscamp
 
GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기
 

PyCon2018 PyQt로 만드는 웹 기반 어플리케이션 만들기