Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PyCon 2017 예제로 살펴보는 PyQt

5,724 views

Published on

본 발표에서는 위젯별로 간단한 예제들을 보여드리면서 PyQt의 기능들을 짚어볼 예정입니다. 예제위주로 설명하기 때문에 빠른 실무 적용에 도움이 되실 거라 생각합니다.

Published in: Technology
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

PyCon 2017 예제로 살펴보는 PyQt

  1. 1. 예제로 살펴보는 PyQt 파이콘 코리아 2017 임덕규
  2. 2. 안녕하세요. 임덕규 입니다.
  3. 3. PyCon 2015 에서도 업무에서 빠르게 만들어 사용하는 PyQt 프로그래밍 을 주제로 발표
  4. 4. 문서를 보란 말보다는 예제를 많이 만들어서 필요한 분이 언제든지 찾아서 쓰게 공개한다
  5. 5. 오픈튜토리얼스에서 만들면서 공부하는 PyQt https://opentutorials.org/course/2581 예제 코드는 GitHub를 통해서 공개 https://github.com/RavenKyu/OpenTutorials_PyQt
  6. 6. 설치부터 pip install PyQt5 - 모듈 설치 pip install pyqt5-tools - Qt 개발 응용툴 설치 배포까지 pip install pyinstaller pyinstaller main.py * 설치와 배포는 윈도우를 기준입니다. * 리눅스와 맥은 경우에 따라서 빌드를 해야 할 수도 있습니다.
  7. 7. PyQt로 개발은 크게 두 가지 Qt Designer 를 이용, 위젯을 배치 후 로직 작성 * 큰 어려움 없이 빠른 속도로 UI설계 가능 * 기본 위젯만 사용했다면, C++ Qt로 빠르게 포팅가능 Qt Designer 를 이용하지 않고, 코드로 위젯을 직접 배치 * 완전히 코드를 장악하고 있다는 정신승리 * 익숙해지면 Qt Designer를 사용하는 것이 오히려 더 불편
  8. 8. Qt Designer * 마우스를 이용하여 위젯배치 * 손쉬운 속성 값 설정 * 위젯과 위젯의 행동 설정 가능 * 최종 결과물로 XML로 위젯정보 기록 * 확장명이 ui 인 파일을 생성 * UI구성에 필요한 기본 Qt 위젯을 제공
  9. 9. Qt Designer ui 파일을 이용하여 개발 #1 XML로 이루어진 ui 파일을 pyuic5를 이용, python 파일로 변환 *에디터에서 자동완성 기능 사용가능 *디자인 변경시마다 ui 파일 변환과정이 귀찮다. pyuic5
  10. 10. Qt Designer ui 파일을 이용하여 개발 #2 uic 모듈의 loadUi() 메서드를 사용 *ui 파일을 변환없이 바로 사용 가능 *변환 과정이 없으므로 작업속도가 향상 *에디터에서 자동완성 기능을 사용할 수 없다.
  11. 11. 하지만, 저 두 방법 모두 마음에 들지 않고 모든 것을 다 손으로 적어 넣기로 결심 *내 타자속도는 마우스 보다 빠르다. (그럴리 없다.) *하드코딩으로 나온 소스가 깨끗. (사장님이 싫어합니다.) *파이썬으로 변환된 ui 파일 내부를 보며 공부하거나 참고할 순 있다. *실제로는 Qt Designer와 하드코딩을 함께 사용합니다. *사용자가 파이썬으로 만든 커스텀 위젯은 Qt Designer에 등록할 수 없다.
  12. 12. 메모장을 만들어 가며 배워보자 윈도우 메모장(notepad)를 PyQt로 작성 * 위젯의 최상위 QWidget 에 대한 이해 *창 위젯 생성 및 설정 *기본 위젯 사용 *시그널과 슬롯의 이해와 사용 *사용자 커스텀 위젯 생성 및 이해 *사용자 정의 시그널과 슬롯 *국제화 i18n(Internationalization) *배포 방법
  13. 13. QWidget은 가장 기본적인 위젯 모든 위젯은 QWidget을 상속 * 윈도우 창을 위한 프레임과 타이틀바 제공 * 입력장치 이벤트 처리 * 출력 처리 * 위치와 크기등의 속성 값 QWidget 난 위젯이야
  14. 14. QPushButton Widget은 상속의 상속을 받아 완성 간단하게 말해보면 * QWdiget - 위치, 크기 * QAbstractButton - 클릭, 토글, 버튼속성, 텍스트 * QPushButton - 버튼 모양, 버튼메뉴 QAbstractButton QWidget 클릭가능해 난 위젯이야 누르는 맛이 있 는 버튼 모양
  15. 15. 시그널과 슬롯 각 위젯이 가진 약속된 행위 * 모든 위젯은 시그널과 슬롯이 있다 * 시그널은 정의된 기능이 실행되면 결과 값을 보낸다 * 슬롯은 시그널이 보낸 값을 받아서 정의된 행위를 한다 * 시그널은 실행할 수 있는 함수가 아니다. * 시그널과 슬롯을 연결시켜야 상호간의 통신 가능. PushButton clicked() pressed() released() LED turn_on() toggled(bool) turn_off() trun(bool)
  16. 16. 사용자 커스텀 위젯 만들기 QWidget을 상속 받거나 다른 위젯을 확장하거나 * QWdiget 을 상속 받아서 완전히 새로운 위젯 작성 * 이미 만들어져 있는 위젯을 상속받고 기능을 추가하거나 변경하기 * 새로운 시그널 및 슬롯 작성 * 여러 위젯을 합쳐서 하나의 위젯으로 만들기 SuperPushButton QPushButton QAbstractButton QWidget QWidget QTextEdit QPushButton
  17. 17. 창 생성 예제소스 https://github.com/RavenKyu/ OpenTutorials_PyQt/commit/ b32b434637e7020b3648205a306dc88881c1 1cde * QMainWindow을 상속 받은 클래스 생성 * 타이틀바의 메모장 아이콘 추가
  18. 18. MenuBar 추가 예제소스 https://github.com/RavenKyu/ OpenTutorials_PyQt/commit/ ddb11952dcb00645077e6aa2fc3eb67c96a1ce 5a * 메뉴바와 메뉴내용 추가 * 단축키 추가
  19. 19. 국제화 한국어 추가 예제소스 https://github.com/RavenKyu/ OpenTutorials_PyQt/commit/ 79aca341cfe995af3c9e728dc0a5e57677cd79 56 * 국제화 툴을 이용하여 여러 언어를 지원 * 시스템 로케일에 따라 해당 국가 언어로 변환
  20. 20. * 언어 지원이 필요한 문자열에 tr() 함수를 사용 하여 문자열 입력 * pro 파일 제작 * tr()이 포함된 파이썬 파일명 * 생성할 언어파일명 * pylupdate5 -noobsolete notepad_i18n.pro * 명시된 파일에서 tr()이 있는 부분을 검사 * 국가별 ts파일 생성 * lrelease.exe" translateko_KR.ts” * qm파일로 변환 * lrelease.exe는 Qt5를 설치 또는 * pip install PyQt_tools 설치
  21. 21. 국제화 예제 예제소스 https://github.com/RavenKyu/ OpenTutorials_PyQt/commit/ 29617f50b8dfa83b8d4aee35221cc28f5f02c3 bc * 언어를 자동 및 수동으로 설정
  22. 22. 텍스트 에디터 추가 예제소스 https://github.com/RavenKyu/ OpenTutorials_PyQt/commit/ 204815dec080b20d1b82e6c6f040e4b3ed9ec a36 * QTextEdit를 추가하여 글을 쓸 수 있게한다 * 확장성을 고려하여 사용자 커스텀 위젯으로 만들 어 둔다.
  23. 23. 메뉴 활성화 예제소스 https://github.com/RavenKyu/ OpenTutorials_PyQt/commit/ a36866caac5d1dfdf6b6e5628a7087169ff8feb6 * 메뉴에 기능별로 사용자 커스텀 시그널을 추가한 다. 예) 새로 만들기, 열기, 저장 * 새로 만들기, 열기 및 저장 클릭시 일어날 이슈 사항 고려
  24. 24. 상태표시바 추가 예제소스 https://github.com/RavenKyu/ OpenTutorials_PyQt/commit/ 4c3b3f0d0e60024403d4596f99d477666832e c81 * 윈도우 하단에 정보를 표출할 수 있는 창 추가 * 사용자가 입력시 커서 위치 좌표 표출 * 드래그된 문자 수 표출
  25. 25. 프린터 추가 예제소스 https://github.com/RavenKyu/ OpenTutorials_PyQt/commit/ ffdba77d5ad044dfc07072d075bb1fbd1e0775 3b * 페이지를 설정할 수 있는 설정 다이얼로그 * 설정한 정보를 이용하여 출력할 수 있는 프린터 * 프린트 출력은 문서형태도 가능하 고 그림도 가능하다.
  26. 26. 완성(정말?) 몇 개의 기능 (찾기, 바꾸기) 등은 포크하여 직접 완 성해 보시기 바랍니다. 추가 가능할만 기능 *드래프트 (임시저장) 기능 *일기장 기능 *Syntax Highlight 기능
  27. 27. QnA

×