프로그래밍/PyQt5 GUI

43. 이벤트 핸들러(슬롯) 만들기

디아블로 2021. 7. 28. 16:40

이벤트(시그널)을 처리할 때 사용되는 함수를 이벤트 핸들러(슬롯)라고 합니다.

'Big', 'Small' 버튼을 클릭시 (시그널이 발생), 창의 크기가 바뀌도록 하는 함수(슬롯)를 정의해 보겠습니다.

 

43-1. 예제: ex42

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLCDNumber, QDial, QVBoxLayout, QHBoxLayout, QPushButton)

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        lcd = QLCDNumber(self)
        dial = QDial(self)
        btn1 = QPushButton('Big', self)
        btn2 = QPushButton('Small', self)

        hbox = QHBoxLayout()
        hbox.addWidget(btn1)
        hbox.addStretch(1)
        hbox.addWidget(btn2)

        vbox = QVBoxLayout()
        vbox.setContentsMargins(0, 0, 0, 0)
        vbox.addWidget(lcd)
        vbox.addWidget(dial)
        vbox.addLayout(hbox)
        self.setLayout(vbox)

        dial.valueChanged.connect(lcd.display)
        btn1.clicked.connect(self.resizeBig)
        btn2.clicked.connect(self.resizeSmall)

        self.setWindowTitle('Signal and Slot')
        self.setGeometry(200, 200, 200, 250)
        self.show()


    def resizeBig(self):
        self.resize(400, 500)

    def resizeSmall(self):
        self.resize(200, 250)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

43-2 설명

btn1.clicked.connect(self.resizeBig)
btn2.clicked.connect(self.resizeSmall)

btn1과 btn2는 각각 resizeBig, resizeSmall 슬롯에 연결되어 있습니다.

def resizeBig(self):
    self.resize(400, 500)

def resizeSmall(self):
    self.resize(200, 250)

resizeBig() 메서드는 화면 크기를 가로 400px, 세로 500px로 확대, resizeSmall() 메서드는 화면 크기를 가로 200px, 세로 250px로 축소하는 기능을 수행합니다.

 

43-3 결과