티스토리 뷰

코딩/Python

파이썬(Python) PyQt5 (1) - 사용하기

개발자 조엘 2022. 9. 1. 15:46

서론


파이썬(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

댓글