안녕하세요, 이번에는 Keyboard에서 Key를 Click하면 발생하는 이벤트에 대해서 정리해서 설명을 드릴려고 합니다. 키보드 키를 누르면 이벤트가 발생하는 방식입니다.
이제까지 Mouse Click 이벤트 구현하기를 주로 정리하였는데, 키보드 키 이벤트와 함께 사용하시면 더 유용하게 사용하실 거 같습니다. 하나 하나 차근 차근 설명해 드리도록 하겠습니다.
1. keyPressEvent (self, e):
: keyboard에서 key를 눌렀을 때 발생하는 event를 Handling 하는 함수라고 이해하시면 됩니다. 비슷하지만, 반대적인 행동으로 인한 발생하는 함수로는 keyReleaseEvent() 가 있습니다. 이 함수에 어떤 key를 눌렀을 때 어떤 event가 발생하는지를 선언할 예정입니다. 참고 자료는 아래 Link를 통해서 참조하시면 됩니다.
[참조 자료 출처 : doc.qt.io/qt-5/qwidget.html#mousePressEvent ]
2. keyPressEventKeyboard Click 이벤트 구현을 위한 코드 구성하기
: Keyboard Click 이벤트를 구현하기 위해서 1번의 함수를 이용하여 아래와 같이 코드를 구현해보도록 하겠습니다. 주목할 사항은, 일단 event를 발생시킬 key들을 선언을 하고, 그 선언한 키들을 하나의 List에 묶습니다. 그리고 그 묶은 리스트안에 해당하지 않은 key들에 대한 예외 처리 코드도 선언할 예정입니다. 그럼 아래 코드를 참조 부탁 드립니다. 각 코드 마다, 설명이 필요한 부분은 주석 처리를 하였습니다.
# 필요한 라이브러리 / 패키지를 선언함
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QDesktopWidget
from PyQt5.QtCore import Qt
class Keyboard_Key_evnt_Menu(QMainWindow) :
def __init__(self) :
super() .__init__()
self.setWindowTitle ("Keyboard Event") # Window Menu Title 설정
self.resize (300, 300)
self.statusbar = self.statusBar()
self.show()
# keyPressEvent 라는 함수를 이용하여, 활용할 Key를 선언
def keyPressEvent(self, e):
def key_sub_event(keyboard_key):
key_group =[
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]
if keyboard_key in key_group:
return True
else:
return False
control = False
if e.modifiers () & Qt.ControlModifier :
self.statusbar.showMessage( "Control")
control = True # Control Value를 True로 선언함으로써 추가적인 Key Event를 수행할 수 있게 함
if e.modifiers () & Qt.ShiftModifier :
self.statusbar.showMessage("Shift")
if e.modifiers () & Qt.AltModifier :
self.statusbar.showMessage("Alt")
if e.key () == Qt.Key_Delete :
self.statusbar.showMessage("Delete")
elif e.key () == Qt.Key_Backspace :
self.statusbar.showMessage("Backspace")
elif e.key () in [Qt.Key_Return, Qt.Key_Enter] :
self.statusbar.showMessage("Enter")
elif e.key () == Qt.Key_Escape :
self.statusbar.showMessage("Escape")
elif e.key () == Qt.Key_Right :
self.statusbar.showMessage("Right")
elif e.key () == Qt.Key_Left :
self.statusbar.showMessage("Left")
elif e.key () == Qt.Key_Up :
self.statusbar.showMessage("Up")
elif e.key () == Qt.Key_Down :
self.statusbar.showMessage( "Down")
# Control Key가 아니고, 위에 선언한 Key 중에 해당되지 않은 Key를 클릭했을 시에, 발생하는 Event를 선언
# 예외 처리라고 간주해도 됨
if not control and key_sub_event(e.key ()) :
self.statusbar.showMessage(e.text ())
if __name__ == "__main__":
app = QApplication(sys.argv)
win = Keyboard_Key_evnt_Menu()
sys.exit(app.exec_())
- 위 코드를 구현을 하면 Pop-up 메뉴의 status 창에 어떤 키를 클릭했는지를 보여 줍니다. 그럼 실제적으로 제가 아래 순서대로 클릭을 해보도록 하겠습니다. 아래 gif 파일을 보시면, 정상적으로 작동하는 걸 확인 하실 수 있습니다.
[Ctrl] - [Alt] - [Shift] - [A] - [a]
이상입니다. 지금까지 Keyboard에서 Key를 Click하면 발생하는 이벤트에 대해서 포스팅을 작성하였습니다. 위의 gif 파일 처럼 구현이 된다면, 잘 코드를 정리하신 것입니다. 제가 선언한 key or event 말고도, 자신만의 event도 만들어보면서 연습하시는 걸 추천 드립니다. 오늘도 공부하느라고 수고하셨구요. 같이 공부하고 같이 성장하시죠! 감사합니다.
제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다.
[참조 자료 출처 : penguinitis.g1.xrea.com/computer/programming/Python/PyQt5/PyQt5-memo/PyQt5-memo.html ]
[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]
'파이썬 (Python) > 파이썬 GUI + PyQt5' 카테고리의 다른 글
PyQt5 파헤치기 QMessageBox Class 이용하기 (0) | 2021.03.02 |
---|---|
파이썬 Python의 GUI 구현 PyQt5 QAction Class를 이용한 리본메뉴 만들기 (0) | 2021.03.01 |
파이썬 Python의 GUI 구현 PyQt5 Mouse Click 이벤트 구현하기 (0) | 2021.03.01 |
파이썬 Python의 GUI 구현 PyQt5 Mouse Tracking 이벤트 구현하기 (2) | 2021.03.01 |
파이썬 Python의 GUI 구현 PyQt5 Designer 이용 방법 (0) | 2021.02.28 |
댓글