본문 바로가기
Back-end/Python

[PyQt5] 무작정 시작하기 (1) - 설치 및 실행

by 허도치 2020. 4. 29.
0. 서론

  요즘 투두리스트를 만들고 있는데, 백앤드는 마이크로 웹 프레임워크인 FlaskWAS로 사용하고 API는 GraphQL, DB는 MongoDB를 사용한다. 프론트앤드는 Javascript 프레임워크인 React를 사용한다. 그래서 개발을 시작할 때마다, 백앤드는 WAS를 기동하고, 프론트앤드는 Dev Server 기동시켜줘야 한다. 이 작업은 매번 반복되는 작업이며 Package를 추가하거나 Build를 할 때, 또 재기동을 시켜줘야한다.

 

  이 반복되는 작업을 줄이고자 간단한 GUI 어플리케이션을 만들기로 하였다. 그래서, GUI 프레임워크 중 가장 보편적으로 사용되는 Qt를 사용하기로 하였으며, Python 버전인 PyQt5를 사용하기로 하였다.

 

  참고로 Dev Server는 Webpack을 사용한다. Webpack은 Javscript 번들러이며, 작성된 소스를 Build하거나 변경된 내용을 Dev Server에 자동으로 반영해주는 react-hot-loader, Javascript의 최신 문법을 사용할 수 있도록 도와주는 babel-loader를 사용할 수 있다. 이 외에도 다양한 플러그인들을 사용할 수 있다.

 

 

 

1. PyQt5란?

  The Qt Company에서 개발하였으며 C++QML(QT Quick Markup Language)라는 자체 스크립트 기반의 '크로스 플랫폼 프레임워크'이다. '크로스 플랫폼'에서 알 수 있듯이 Windows, Linux, OSX, Android, iOS 등 대부분의 플랫폼을 지원한다.

 

  Qt는 Qt4Qt5로 나뉘는데, 메이저 버전은 Qt5이다. Qt4는 2015년 상반기에 마지막으로 릴리즈된 후 더이상 지원하지 않으며 데스크탑 플랫폼 개발을 목적으로 한다. 모바일 플랫폼 개발은 아키텍처의 한계로 적합하지 않다. Qt5는 5.2버전까지 악평이 자자해서 릴리즈가 중단된 Qt4를 계속 사용해왔었는데, 최근 버전은 데스크탑과 더불어 모바일 플랫폼에서도 상당한 완성도를 보인다고 한다

 

 

 

2. 설치
pip insatll pyqt5

 

 

 

3. 예제
3-1. 예제 소스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# app.py
import sys
from PyQt5 import QtWidgets
 
if __name__ == '__main__':
  app = QtWidgets.QApplication( sys.argv )
  
  form1 = QtWidgets.QWidget()
  form1.setWindowTitle("첫번째 위젯"
  form1.move(100100)
  form1.resize(300400)
  form1.show()
  
  form2 = QtWidgets.QWidget()
  form2.setWindowTitle("두번째 위젯"
  form2.move(500100)
  form2.resize(300200)
  form2.show()
  
  sys.exit( app.exec() )
cs

1. [ 3 ln ] - QtWidgets, 위젯을 그려주기 위한 모듈

 

2. [ 6 ln ] - 위젯을 출력할 Application 객체 생성.

   : QtWidgets은 반드시 QtApplication 객체가 생성된 상태여야 함.

 

3. [ 8~12 ln ] - 위젯 생성 및 출력.

   : [ 8 ln ] - 위젯 객체 생성.

   : [ 9 ln ] - 제목 설정.

   : [ 10 ln ] - 출력할 위치 설정.

   : [ 11 ln ] - 사이즈 설정.

   : [ 12 ln ] - 출력.

 

4. [ 14~18 ln ] - 위젯 생성 및 출력.

   : 3번과 동일.

 

5. [ 20 ln ] - Application 실행

   : Application이 종료되면 sys.exit() 명령에 의해 프로세스가 종료되도록 설정.

 

 

 

3-2. 실행 결과

1.  설정한 위치에 위와 같이 2개의 위젯이 출력됨.

 

2. 2개의 위젯을 모두 닫으면 프로세스가 종료됨.

 

3. 만약 QtWidgets을 생성하기 전에 QtApplication을 생성하지 않으면 아래와 같은 오류가 발생.

 

 

 

마치며

  이번 포스트에서는 간단하게 위젯을 띄워봤는데, 생각보다 쉽고 간단해서 좋았다. 다음 포스트에서는 입력창과 버튼을 붙여보도록 하겠다.

댓글