본문 바로가기

About 배우고 익히는법/Python

[Python GUI] PyQt5 입문하기 + 강좌 자료 모음

이번 포스팅에서는 Python으로  GUI 를 개발하는 방법에 대해 알아보자. 원래는 필자가 직접 GUI 입문 강좌를 써내려 갈 생각이였는데, 좋은 자료가 이미 많고 필자가 귀찮아서 초반에 헤매게 되는 몇가지만 짚고 넘어가고 강좌 모음을 링크로 남기기로 했다.

PyQt5 설치하기
먼저 PyQt를 설치하는 방법이다. 직접 홈페이지에 들어가서 다운로드를 해줘도 되지만 킹갓 파이썬의 pip를 이용해서 쉽게 설치를 받을 수 있다.

$ pip install PyQt5 $ pip install pyqt5-tools

보통은  PyQt5를 치면 같이 설치되어야 하는데, 간혹 밑에 pyqt5-tools가 같이 설치되지 않는 경우가 있다고 한다. 위에서 이미 같이 설치된다면 이미 설치되어 있다고 뜨고 끝날테니 일단 2개 다 쳐주자.

PyQt5 Quick Start
PyQt, 아니 거의 모든 GUI를 개발할 때, UI 겉표면를 디자인하는 방법은 딱 2가지이다.
python 코드로 쳐서 직접 그리던가, 외부 IDE를 사용해 마우스로 그리던가. 둘 다 섞는 경우도 있다는 데 필자의 경우, QtDesigner라는 외부 툴을 사용해 UI를 디자인한 후, Python 코드에 붙인다.

QtDesigner로 UI 그리기
먼저 UI를 그려보자. 아까 pip로 설치한 Pyqt5 경로로 찾아가, pyqt5-tools 폴더로 들어가 보자.
아마 환경마다 경로가 조금씩 다를 것이지만 필자는 이 경로이다.

C:\Users\IML\AppData\Local\Programs\Python\Python36-32\Lib\site-packages \pyqt5-tools


해당 폴더 안에 designer.exe를 실행시키자.

실행시키면 곧바로 이런 창이 뜨는 데, 해당 UI를 디자인하기 위한 기본적인 템플릿을 골라라는 것이다. 아무것도 뜨지 않는 빈 창인 Dialog without Buttons를 선택해서 Create를 누르자.
만약 기존의 ui 파일이 있을 경우, Open을 통해 해당 UI를 열어 수정할 수 있다.

생성을 누르면 아래와 같이 UI를 디자인할 수 있는 창이 나타난다.

상단에서는 UI 파일을 열고 저장하는 등의 기능을 수행할 수 있다.
왼쪽에서 Widget를 드래그하여 중앙에 창으로 끌어와 해당 Widget를 Windows 창에 넣을 수 있다.
오른쪽 탭에서는 각 Widget 등의 요소에 접근하여 속성을 수정할 수 있다.(크기를 조절하거나, 폰트를 바꾸거나 등등)

필자는 맨 밑에 Display Widgets의 Label를 끌어오겠다. 생성된 위젯은 드래그로 위치를 옮기거나 파란 점을 움직여 크기를 조절할 수 있다.

해당 위젯을 눌러 오른쪽 Property Editor에서 폰트나 크기를 바꿔주고..

텍스트도 바꿔주고..

정렬 설정도 바꿔주었다.

Ctrl + R을 눌러 해당 UI의 미리보기를 볼 수 있다.

상단의 플로피 디스크 모양인 딱봐도 저장버튼인 것을 눌러서 원하는 경로에 저장해주도록 하자. 확장자는 .ui 파일로 저장되지만 직접 열어보면 XML 파일인 것을 확인할 수 있다. 필자는 asd.ui로 바탕화면에 대충 저장하였다.

이제 같은 경로에 asd.py(파이썬 파일)을 만들어 아래와 같이 작성하자.

import sys from PyQt5 import QtWidgets ,uic class Form(QtWidgets.QDialog): def __init__(self): super().__init__() self.ui = uic.loadUi("asd.ui") #ui 파일 불러오기 self.ui.show() if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) w = Form() sys.exit(app.exec())

작성이 완료되었다면 바로 실행시켜보자. 
짜좐.


PyQt5 입문 강좌 모음
아래는 필자가 공부하면서 참고했던 강좌 링크들이다. 설명이 잘 되었지만, 어떤 강좌에는 있는데, 어떤 강좌에는 없는 것들이 있어서 상호보완적으로 공부하면 좋을 것 같다.