프로젝트 및 실습/PyQt

[PyQt] Ctrl + KeyPressEvent 사용법

jooona 2022. 10. 4. 18:29
반응형

KeyPressEvent 이벤트 핸들러를 사용하면 키보드 입력을 쉽게 받아와서 특정 기능을 수행하도록 구현할 수 있습니다.

 

그렇다면 [Ctrl + X]처럼 Ctrl 또는 Shif와 같은 버튼과 함께 키보드 입력을 받아오려면 어떻게 해야할까요?

 

 아래는 Ctrl + 특정 Key를 눌렀을 때 이벤트가 실행되도록 하는 예제입니다.

 

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

class MyApp(QWidget):

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

    def initUI(self):
        self.setWindowTitle('KeyPressEvent Example')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def keyPressEvent(self, e):
        if e.modifiers() & Qt.ControlModifier:
            if e.key() == Qt.Key_X:
                self.close()
            elif e.key() == Qt.Key_F:
                self.showFullScreen()
            elif e.key() == Qt.Key_N:
                self.showNormal()
            elif e.key() == Qt.Key_M:
                self.showMinimized()

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

 

Event의 modifiers()를 이용하면 쉽게 구현할 수 있습니다. modifiers()는 Keyboard에서 Ctrl, Shift, Alt와 같은 키들이 눌렸을 때 그 정보를 저장합니다. 그래서 먼저 위와 같은 키들이 눌렸는지 확인하고, 뒤에 따라오는 & 연산을 통해 눌린 키가 Ctrl인지, Shift인지 확인할 수 있습니다. 

 

위의 코드에 나오는 if e.modifiers() & Qt.ControlModifer: 를 예로 들면, e.modifier()에서 Ctrl, Shift와 같은 키가 눌렸는지 확인하고, & 연산을 통해 해당 키가 Ctrl 키임을 확인한 뒤 If 문 안으로 들여보내주는 방식입니다.

 

Ctrl 버튼 대신 Shift 버튼을 사용하고 싶다면 Qt.ControlModifier 대신에 Qt.ShiftModifier를, Alt 버튼을 사용하고 싶다면 Qt.AltModifier를 사용하시면 됩니다.

 

 

 

 

위 코드의 경우,

 

Ctrl + X: 창 닫기

Ctrl + F: 전체 화면

Ctrl + N: 일반 화면 크기

Ctrl + M: 최소화 

 

로 구현했습니다.

반응형