이벤트는 사용자와 애플리케이션 간의 상호작용을 처리하는 데 중요한 역할을 합니다. PySide6에서는 다양한 이벤트를 처리할 수 있는 메커니즘을 제공합니다. 이 장에서는 이벤트의 기본 개념과 이벤트를 처리하는 방법에 대해 알아보겠습니다.
#### 이벤트의 기본 개념
이벤트는 사용자가 애플리케이션과 상호작용할 때 발생하는 다양한 동작을 나타냅니다. 예를 들어, 버튼 클릭, 키보드 입력, 마우스 이동 등이 있습니다. 이러한 이벤트는 Qt의 이벤트 루프를 통해 처리됩니다.
#### 이벤트 핸들러
이벤트 핸들러는 특정 이벤트가 발생할 때 호출되는 함수입니다. PySide6에서는 다양한 이벤트를 처리하기 위해 여러 이벤트 핸들러를 제공합니다. 이벤트 핸들러를 재정의하여 원하는 동작을 구현할 수 있습니다.
**마우스 이벤트**
마우스 이벤트는 사용자가 마우스를 클릭하거나 이동할 때 발생합니다. 마우스 이벤트를 처리하려면 `mousePressEvent`, `mouseReleaseEvent`, `mouseMoveEvent` 등의 이벤트 핸들러를 재정의합니다.
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Mouse Event Example")
def mousePressEvent(self, event):
print(f"Mouse pressed at {event.position()}")
def mouseReleaseEvent(self, event):
print(f"Mouse released at {event.position()}")
def mouseMoveEvent(self, event):
print(f"Mouse moved to {event.position()}")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제에서는 마우스 버튼을 누르거나, 놓거나, 이동할 때마다 해당 위치를 출력합니다.
**키보드 이벤트**
키보드 이벤트는 사용자가 키보드를 눌렀을 때 발생합니다. 키보드 이벤트를 처리하려면 `keyPressEvent`, `keyReleaseEvent` 등의 이벤트 핸들러를 재정의합니다.
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Keyboard Event Example")
def keyPressEvent(self, event):
print(f"Key pressed: {event.key()}")
def keyReleaseEvent(self, event):
print(f"Key released: {event.key()}")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제에서는 키를 누르거나 놓을 때마다 해당 키 코드를 출력합니다.
**타이머 이벤트**
타이머 이벤트는 일정한 간격으로 발생합니다. 타이머 이벤트를 처리하려면 `QTimer` 클래스를 사용하여 타이머를 설정하고, `timerEvent` 이벤트 핸들러를 재정의합니다.
```python
import sys
from PySide6.QtCore import QTimer, QEvent
from PySide6.QtWidgets import QApplication, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Timer Event Example")
self.timer = QTimer(self)
self.timer.timeout.connect(self.handle_timeout)
self.timer.start(1000) # 1초 간격으로 타이머 설정
def handle_timeout(self):
print("Timer timeout")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제에서는 1초 간격으로 타이머가 타임아웃될 때마다 "Timer timeout" 메시지를 출력합니다.
**이벤트 필터**
이벤트 필터는 특정 객체에 대해 발생하는 이벤트를 가로채는 메커니즘입니다. 이벤트 필터를 사용하려면 `installEventFilter` 메서드를 사용하여 필터를 설치하고, `eventFilter` 메서드를 재정의합니다.
```python
import sys
from PySide6.QtCore import QObject, QEvent
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
class Filter(QObject):
def eventFilter(self, watched, event):
if event.type() == QEvent.MouseButtonPress:
print("Mouse button pressed in filtered object")
return True # 이벤트를 필터링하여 처리된 것으로 표시
return super().eventFilter(watched, event)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Event Filter Example")
self.button = QPushButton("Click me")
self.setCentralWidget(self.button)
self.filter = Filter()
self.button.installEventFilter(self.filter)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제에서는 버튼에 이벤트 필터를 설치하여 마우스 버튼이 눌렸을 때 메시지를 출력하고 이벤트를 필터링합니다.
### 결론
이 장에서는 PySide6에서 다양한 이벤트를 처리하는 방법에 대해 알아보았습니다. 마우스 이벤트, 키보드 이벤트, 타이머 이벤트, 이벤트 필터 등을 사용하여 사용자와의 상호작용을 효율적으로 처리할 수 있습니다. 다음 장에서는 Qt 디자이너를 사용하여 그래픽 사용자 인터페이스를 디자인하는 방법을 알아보겠습니다.
'PYTHON(파이썬) > PYSIDE6(GUI)' 카테고리의 다른 글
| PYSIDE6 QT디자이너 사용하기 (0) | 2024.10.24 |
|---|---|
| PYSIDE6 QT디자이너 설치 (5) | 2024.10.24 |
| PYSIDE6 창 (1) | 2024.10.24 |
| PYSIDE6 대화상자 (1) | 2024.10.24 |
| PYSIDE6 액션, 도구 모음, 메뉴 (0) | 2024.10.23 |