반응형
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: 최소화
로 구현했습니다.
반응형
'프로젝트 및 실습 > PyQt' 카테고리의 다른 글
[PyQt] Table Widget 열 너비를 Text 길이에 맞추기 (0) | 2022.09.28 |
---|---|
[PyQt] Checkbox StateChanged 시그널 (0) | 2022.09.28 |
[PyQt] Tri-state Checkbox (0) | 2022.09.28 |
[PyQt] Qt Designer 설치 및 실행 (in Pycharm) (0) | 2022.09.14 |