본문 바로가기

프로그래밍/PyQt5 GUI

44. 이벤트 핸들러(슬롯) 재구성하기

아래와 같이 자주 쓰이는 이벤트 핸들러는 이미 만들어져 있는 경우가 많습니다.

이벤트 핸들러 설명
keyPressEvent 키보드를 눌렀을 때 동작합니다.
keyReleaseEvent 키보드를 눌렀다가 뗄 때 동작합니다.
mouseDoubleClickEvent 마우스를 더블클릭할 때 동작합니다.
mouseMoveEvent 마우스를 움직일 때 동작합니다.
mousePressEvent 마우스를 누를 때 동작합니다.
mouseReleaseEvent 마우스를 눌렀다가 뗄 때 동작합니다.
moveEvent 위젯이 이동할 때 동작합니다.
resizeEvent 위젯의 크기를 변경할 때 동작합니다.

keyPressEvent 이벤트 핸들러를 수정해서, 특정 키를 눌렀을 때 위젯을 종료하거나 최대화, 보통 크기로 조절하는 기능을 구현합니다.

 

44-1. 예제: ex43

import sys
from PyQt5.QtWidgets import (QApplication, QWidget)
from PyQt5.QtCore import Qt



class MyApp(QWidget):
    key_code = [Qt.Key_Space, Qt.Key_Exclam, Qt.Key_QuoteDbl, Qt.Key_NumberSign, Qt.Key_Dollar, Qt.Key_Percent,
                Qt.Key_Ampersand, Qt.Key_Apostrophe, Qt.Key_ParenLeft, Qt.Key_ParenRight, Qt.Key_Asterisk, Qt.Key_Plus,
                Qt.Key_Comma, Qt.Key_Minus, Qt.Key_Period, Qt.Key_Slash, Qt.Key_0, Qt.Key_1, Qt.Key_2, Qt.Key_3,
                Qt.Key_4, Qt.Key_5, Qt.Key_6, Qt.Key_7, Qt.Key_8, Qt.Key_9, Qt.Key_Colon, Qt.Key_Semicolon,
                Qt.Key_Less, Qt.Key_Equal, Qt.Key_Greater, Qt.Key_Question, Qt.Key_At, Qt.Key_A, Qt.Key_B, Qt.Key_C,
                Qt.Key_D, Qt.Key_E, Qt.Key_F, Qt.Key_G, Qt.Key_H, Qt.Key_I, Qt.Key_J, Qt.Key_K, Qt.Key_L, Qt.Key_M,
                Qt.Key_N, Qt.Key_O, Qt.Key_P, Qt.Key_Q, Qt.Key_R, Qt.Key_S, Qt.Key_T, Qt.Key_U, Qt.Key_V, Qt.Key_W,
                Qt.Key_X, Qt.Key_Y, Qt.Key_Z, Qt.Key_BracketLeft, Qt.Key_Backslash, Qt.Key_BracketRight,
                Qt.Key_AsciiCircum, Qt.Key_Underscore, Qt.Key_QuoteLeft, Qt.Key_BraceLeft, Qt.Key_Bar,
                Qt.Key_BraceRight, Qt.Key_AsciiTilde, Qt.ControlModifier, Qt.ShiftModifier, Qt.AltModifier,
                Qt.Key_Delete, Qt.Key_Backspace, Qt.Key_Return, Qt.Key_Enter, Qt.Key_Escape, Qt.Key_Right, Qt.Key_Left,
                Qt.Key_Up, Qt.Key_Down]
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Reimplementing event handler')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Escape:
            print('KeyPress:ESC')
            self.close()
        elif e.key() == Qt.Key_F:
            print('KeyPress:F')
            self.showFullScreen()
        elif e.key() == Qt.Key_N:
            print('KeyPress:N')
            self.showNormal()


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

44-2 설명

def keyPressEvent(self, e):
    if e.key() == Qt.Key_Escape:
        self.close()
    elif e.key() == Qt.Key_F:
        self.showFullScreen()
    elif e.key() == Qt.Key_N:
        self.showNormal()

keyPressEvent 이벤트 핸들러는 키보드의 이벤트를 입력으로 받습니다.

e.key()는 어떤 키를 누르거나 뗐는지를 반환합니다.

'esc' 키를 눌렀다면, self.close()를 통해 위젯이 종료됩니다.

'F' 키 또는 'N' 키를 눌렀다면, 위젯의 크기가 최대화되거나 보통 크기가 됩니다.

 

'프로그래밍 > PyQt5 GUI' 카테고리의 다른 글

46. 사용자 정의 시그널  (0) 2021.07.28
45. 이벤트 핸들러(슬롯) 재구성하기2  (0) 2021.07.28
43. 이벤트 핸들러(슬롯) 만들기  (0) 2021.07.28
42. 시그널과 슬롯 연결  (0) 2021.07.28
41. QMessageBox  (0) 2021.07.28