상세 컨텐츠

본문 제목

[PySide6] Event 다루기

pyside6

by 빨간눈동자 2021. 9. 14. 00:30

본문

반응형

위젯이 수신하는 주요 이벤트 중에는 QMouseEvent 와 QKeyEvent 가 있다.

QMouseEvent는 위젯의 모든 마우스 움직임과 버튼 클릭에 대해 생성된다. 마우스 이벤트를 처리하는 데 사용할 수 있는 이벤트 핸들러는 다음과 같다.

 

Event handler Behavior
mouseMoveEvent Mouse moved
mousePressEvent Mouse button pressed
mouseReleaseEvent Mouse button released
mouseDoubleClickEvent Double click detected

 

QKeyEvent는 키보드의 입력에 대해 event가 생성된다. 키보드 이벤트를 처리하는데 사용할 수 있는 이벤트 핸들러는 다음과 같다. 

 

Event handler Behavior
keyPressEvent  Keyboard를 누를때
keyReleaseEvent  Keyboard를 눌렀다 뗄때

 

간단한 예제를 살펴보도록 하자. 

 

import sys

from PySide6.QtWidgets import QApplication, QLabel, QMainWindow
from PySide6.QtCore import Qt


class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.label = QLabel("Click in this window")
        self.setCentralWidget(self.label)

    def mouseMoveEvent(self, e):
        self.label.setText("mouseMoveEvent : " + str(e.pos().x()) + ", " + str(e.pos().y()))

    def mousePressEvent(self, e):
        self.label.setText("mousePressEvent : " + str(e.pos().x()) + ", " + str(e.pos().y()))

    def mouseReleaseEvent(self, e):
        self.label.setText("mouseReleaseEvent : " + str(e.pos().x()) + ", " + str(e.pos().y()))

    def mouseDoubleClickEvent(self, e):
        self.label.setText("mouseDoubleClickEvent : " + str(e.pos().x()) + ", " + str(e.pos().y()))

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Escape:
            self.label.setText("keyPressEvent : Key_Escape")

    def KeyReleaseEvent(self, e):
        self.label.setText("KeyReleaseEvent")

app = QApplication(sys.argv)

window = MyWindow()
window.show()

app.exec()

 

마우스 동작에 대한 결과 값은 아래와 같다. 

mouse click 후 이동시 event
mouse click 시 event
mouse release 시 event
mouse double click 시 event

또한 키보드 동작에 대한 결과는 아래와 같다. 

 

ESC 버튼을 눌렀을 때

 

키보드에는 다양한 key들이 존재하고 있다. 

관련 key에 대해서는 아래 주소에 좀 더 자세히 설명되어있다.  아래 값을 참고하여 다양한 key에 대해 처리할 수 있다. 

 

https://doc.qt.io/qtforpython/PySide6/QtCore/Qt.html

 

Qt — Qt for Python

 

doc.qt.io

 

 

KeyReleaseEvent() 함수는 호출이 되지 않는데.. 이 부분은 시간날 때 좀 더 살펴봐야할 듯 하다.. 

반응형

'pyside6' 카테고리의 다른 글

[PySide6] QComboBox 사용하기  (2) 2021.09.09
[PySide6] QTextBrowser 사용하기  (0) 2021.09.03
[PySide6] QTextEdit 사용하기  (1) 2021.09.03
[PySide6] Style sheet 사용법(WIP)  (0) 2021.09.03
[PySide6] QDockWidget 사용하기  (0) 2021.09.03

관련글 더보기