티스토리 뷰

코딩/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

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함
반응형