서론
파이썬(Python)을 처음 공부하면서 예제들이 콘솔 창에 값을 출력하는 것들 위주여서 UI를 어떻게 구현해야하는지 궁금했습니다. 그러던 중에 알게된 것이 PyQt5입니다. PyQt5는 Qt5 어플리케이션 프레임워크에 대한 파이썬 버전입니다. Qt는 플랫폼에 관계없이 다양한 기능을 포함하는 C++ 라이브러리 이자 개발툴인데요. PyQt5는 이러한 1000여개의 클래스들을 포함하는 파이썬 모듈의 모음입니다.
1. 기본 창 띄우기
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 창 타이틀 설정 -> My
self.setWindowTitle("My First Window")
# 창 아이콘 설정 -> icon.svg (폴더 경로에 이미지 파일 존재)
self.setWindowIcon(QIcon("icon.svg"))
# 창 사이즈 -> (300, 300)
self.resize(300, 300)
# 창 위치 -> 화면 Center
self.center()
# 창 Show
self.show()
def center(self):
# geometry of the main window
qr = self.frameGeometry()
# center point of screen
cp = QDesktopWidget().availableGeometry().center()
# move rectangle's center point to screen's center point
qr.moveCenter(cp)
# top left of rectangle becomes top left of window centering it
self.move(qr.topLeft())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
💡
기본적인 창을 띄우는 기능을 구현한 전체 코드입니다.
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
💡
우선 PyQt5를 사용하기 위해서는 설치가 필요합니다.
pip install PyQt5
💡
해당 코드는 필요한 모듈들을 불러옵니다.
def initUI(self):
# 창 타이틀 설정 -> My First Application
self.setWindowTitle('My First Application')
# 창 아이콘 설정 -> icon.svg (폴더 경로에 이미지 파일 존재)
self.setWindowIcon(QIcon('icon.svg'))
# 창 사이즈 -> (300, 300)
self.resize(300, 300)
# 창 위치 -> 화면 Center
self.center()
# 창 Show
self.show()
💡
self.setWindowTitle("My First Application")
는 창 타이틀을 설정합니다.💡
self.setWindowIcon(QIcon("icon.svg"))
는 창 아이콘을 설정합니다. icon.svg 파일을 해당 코드와 같은 폴더에 넣어놨습니다.💡
self.resize(300, 300)
는 창의 사이즈를 조정합니다. 해당 코드는 x = 300, y = 300 사이즈로 조정합니다.💡
self.center()
는 밑에 자체적으로 구현한 center 메소드입니다. 밑에서 설명하겠습니다.💡
self.show()
는 창을 show합니다..
def center(self):
# geometry of the main window
qr = self.frameGeometry()
# center point of screen
cp = QDesktopWidget().availableGeometry().center()
# move rectangle's center point to screen's center point
qr.moveCenter(cp)
# top left of rectangle becomes top left of window centering it
self.move(qr.topLeft())
💡
center
는 창을 화면 중앙에 띄우기 위해 구현한 메소드입니다. 스크린의 Center Point를 구한 뒤에 창을 중앙으로 이동시킵니다.

💡
실행해서 창을 띄운 결과입니다. 위치는 화면 중앙이고 창 타이틀, 창 아이콘, 창 사이즈가 모두 정상적으로 적용된 모습입니다.
2. 컨트롤 그리드 레이아웃 배치
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('SansSerif', 10)) # 툴팁 폰트 설정
grid = QGridLayout()
self.setLayout(grid)
grid.addWidget(QLabel('Title:'), 0, 0) # Label 추가 (0, 0)
grid.addWidget(QLabel('Author:'), 1, 0) # Label 추가 (1, 0)
grid.addWidget(QLabel('Review:'), 2, 0) # Label 추가 (2, 0)
lineEdit1 = QLineEdit()
lineEdit1.setToolTip('This is LineEdit1') # 툴팁 추가
grid.addWidget(lineEdit1, 0, 1) # LineEdit 추가 (0, 1)
lineEdit2 = QLineEdit()
lineEdit2.setToolTip('This is LineEdit2') # 툴팁 추가
grid.addWidget(lineEdit2, 1, 1) # LineEdit 추가 (1, 1)
textEdit1 = QTextEdit()
textEdit1.setToolTip('This is TextEdit1') # 툴팁 추가
grid.addWidget(textEdit1, 2, 1) # TextEdit 추가 (2, 1)
self.setWindowTitle("My First Application")
self.setWindowIcon(QIcon("icon.svg"))
self.resize(300, 300)
self.center()
self.show()
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
💡
그리드 레이아웃으로 컨트롤들을 배치하는 기능을 구현한 전체 코드입니다.
def initUI(self):
QToolTip.setFont(QFont('SansSerif', 10)) # 툴팁 폰트 설정
grid = QGridLayout()
self.setLayout(grid)
grid.addWidget(QLabel('Title:'), 0, 0) # Label 추가 (0, 0)
grid.addWidget(QLabel('Author:'), 1, 0) # Label 추가 (1, 0)
grid.addWidget(QLabel('Review:'), 2, 0) # Label 추가 (2, 0)
lineEdit1 = QLineEdit()
lineEdit1.setToolTip('This is LineEdit1') # 툴팁 추가
grid.addWidget(lineEdit1, 0, 1) # LineEdit 추가 (0, 1)
lineEdit2 = QLineEdit()
lineEdit2.setToolTip('This is LineEdit2') # 툴팁 추가
grid.addWidget(lineEdit2, 1, 1) # LineEdit 추가 (1, 1)
textEdit1 = QTextEdit()
textEdit1.setToolTip('This is TextEdit1') # 툴팁 추가
grid.addWidget(textEdit1, 2, 1) # TextEdit 추가 (2, 1)
💡
QGridLayout으로 Layout을 설정하고, QGridLayout에 Widget들을 추가합니다. LineEdit과 TextEdit에는 툴팁도 추가해봅니다.

💡
실행해서 창을 띄운 결과입니다. 그리드 레이아웃으로 컨트롤들이 배치된 모습입니다.
마무리
파이썬(Python)에서 PyQt5를 사용해보는 첫번째 포스팅입니다. 처음에 파이썬으로 UI를 그리는게 막막하긴 했는데 공부하다보니까 간단한 UI를 그리는 것은 할 수 있을 것 같습니다. 앞으로 PyQt5의 다양한 기능들을 구현하는 방법에 대해서 공부해보고 포스팅할 수 있도록 하겠습니다.
Uploaded by N2T