👩‍💻 도비는 공부중/💼 하계연구연수생(2023)

[PyQt5] Python을 위한 GUI 라이브러리

오모짱_ 2023. 7. 14. 11:05

1. Layout

: 어플리케이션 창 위에 위젯을 배치하는 방식

 

 

1.1 Absolute positioning

 

각 위젯의 위치와 크기를 픽셀 단위로 설정해 배치

- 창의 크기를 조절해도 위젯의 크기/위치는 변하지 않아

- 플랫폼에 따라 어플리케이션이 다르게 보일 수 있어

- 폰트 변경 시 레이아웃 망가질 수 있다

=> 레이아웃 변경 시 완전히 새로 고쳐야 하므로 매우 번거로움..

 

 

1.2 Box layout

 

QHBoxLayout, QVBoxLayout은 여러 위젯을 수평, 수직으로 정렬하는 레이아웃 클래스

생성자는 수평, 수직의 박스를 하나 만들어 <- 다른 레이아웃 박스 or 위젯 배치

 

addStretch() - 필요한 공간 만들고, stretch factor 조절

vbox = QVBoxLayout()
vbox.addStretch(3)
vbox.addLayout(hbox)
vbox.addStretch(1)

 

1.3 Grid layout

grid = QGridLayout()
self.setLayout(grid)

QGridLaoyout을 만들고, 어플리케이션 창의 레이아웃으로 설정한다.

 

grid.addWidget(QLabel('Title:'), 0, 0)		# 추가할 위젯, 행, 열
grid.addWidget(QLabel('Author:'), 1, 0)
grid.addWidget(QLabel('Review:'), 2, 0)

 

Layout 중첩

https://wikidocs.net/5245

 


2. Widget

 

어플리케이션을 이루는 기본 구성 요소, PyQt 툴킷에서 다양한 위젯을 제공한다.

+ 둘러보기

 


3. Dialog

 

사용자가 데이터를 입력, 수정, 어플리케이션 설정 변경하는 작업하는데 사용 (대화창)

+ 둘러보기

 


4. Signal / Slot

 

PyQt에서 이벤트(=signal) 처리 할 때 사용되는 함수, 이벤트 핸들러를 슬롯이라고 한다.

 

사용자 정의 시그널

class Communicate(QObject):

    closeApp = pyqtSignal()

Communicate class 속성으로 closeApp 시그널을 생성한다.

 

class MyApp(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.c = Communicate()
        self.c.closeApp.connect(self.close)

        self.setWindowTitle('Emitting Signal')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def mousePressEvent(self, e):
        self.c.closeApp.emit()

MyApp 클래스의 close() 슬롯에 연결되고 mousePressEvent 핸들러를 사용해, 마우스 클릭 시 closeApp 시그널이 동작

 


4. PyQTt5 그림 그리기

 

QPainter 클래스는 GUI 프로그램에 필요한 '그리기'와 관련된 기능을 제공한다.

QPainter 의 동작은 일반적으로 위젯의 페인트 이벤트를 통해 이루어진다.

 


5. 실행파일 만들기 (PyInstaller)

 

PyInstaller 를 이용해 python과 pyQt로 제작한 GUI 프로그램을 실행파일(exe)로 만들 수 있다.

 

 

1. Pyinstaller 패키지 설치

pip install pyinstaller

 

2. python 파일이 있는 폴더로 이동 후, 아래 명령어로 해당 폴더에 실행 파일 생성

pyinstaller (-w | -F) file_name.py

콘솔창이 출력되지 않게 하려면 -w 또는 -windowed 옵션을 추가한다

실행 파일 하나만 생성하기 위해서는 -F 또는 -onefile 옵션을 추가한다