본문 바로가기
Beginning PyQt

Handling Events in PyQt

by 어린왕자1234 2022. 5. 14.

GUI는 작업을 수행해야 하기 때문에 위젯, 창 및 응용 프로그램의 다른 측면은 발생하는 이벤트에 대응할 수 있어야 합니다. 사용자 또는 기본 시스템에 의해 발생하든, 이벤트 및 가능한 데이터는 적절한 위치로 전달되고 그에 따라 처리되어야 합니다.

Qt의 이벤트는 QEvent 클래스에서 생성 된 객체입니다. 이벤트 객체는 사용자 또는 응용 프로그램 외부의 시스템 활동에 의해 발생하는 결과로 GUI에서 발생할 수 있는 다양한 유형의 상호 작용을 설명합니다. 이러한 이벤트는 응용 프로그램의 기본 이벤트 루프가 시작되면 시작됩니다. 키 누르기, 마우스 클릭, 창 크기 조정 또는 위젯 또는 데이터의 드래그 앤 드롭 등 대부분의 이벤트에는 이벤트 객체를 생성하고 event() 메서드를 호출하여 적절한 QObject에 전달하는 QEvent의 자체 하위 클래스가 있으며, 이 하위 클래스는 적절한 Event Handler에서 처리합니다. (QWidget은 QObject를 상속받는다는 것을 상기하십시오.) 이벤트의 응답은 수락되었는지 무시되었는지를 결정하는 데 사용됩니다.

 

The Event System | Qt Core 6.3.0

 

doc.qt.io

PyQt의 위젯은 신호와 슬롯을 사용하여 객체 간에 통신합니다. 이벤트와 마찬가지로 신호는 사용자의 행동이나 내부 시스템에 의해 생성 될 수 있습니다. 슬롯은 신호에 응답하여 실행되는 메소드입니다. 예를 들어, QPushButton을 누르면 클릭된 신호가 방출됩니다. 이 신호는 사용자가 응용 프로그램을 종료할 수 있도록 close()와 같은 기본 제공 PyQt 슬롯에 연결하거나 일반적으로 Python 함수인 사용자 지정 슬롯에 연결할 수 있습니다. 신호는 슬롯에 추가 데이터를 보내고 이벤트에 대한 자세한 정보를 제공하는 데 사용할 수 있기 때문에 유용합니다.

클릭 된 신호는 미리 정의 된 많은 Qt 신호 중 하나 일뿐입니다. 방출할 수 있는 신호 유형은 위젯 클래스에 따라 다릅니다. PyQt는 미리 정의된 특정 이벤트 처리 함수를 호출하여 위젯에 이벤트를 제공합니다. 이러한 기능은 show() 또는 close() 와 같은 창 작업과 관련된 함수부터 setStyleSheet()를 사용한 GUI appearances , 마우스 press 및 release 이벤트 등에 이르기까지 다양합니다.

https://www.riverbankcomputing.com/static/Docs/PyQt6/signals_slots.html

 

Support for Signals and Slots — PyQt Documentation v6.3.0

Support for Signals and Slots One of the key features of Qt is its use of signals and slots to communicate between objects. Their use encourages the development of reusable components. A signal is emitted when something of potential interest happens. A slo

www.riverbankcomputing.com

Using Event Handlers to Handle Events

Event Handler는 이벤트에 응답하는 함수입니다. 이벤트를 전달하기 위해 QEvent 서브클래스가 생성되는 동안 해당 QWidget 메서드가 실제로 이벤트를 처리합니다. closeEvent() Event Handler를 사용하여 창을 닫았습니다. 닫기 이벤트 개체를 만드는 클래스는 QCloseEvent입니다.

 

Difference Between Signals and Slots and Event Handlers

일반적으로  신호와 슬롯은 다른 위젯과 다른 PyQt 클래스 간의 통신에 사용됩니다.

 

Handling Key Events

키를 누르거나 놓으면 QKeyEvent가 생성됩니다. 키 이벤트는 현재 키보드 포커스가 있는 위젯으로 전송됩니다. 그런 다음 다음 QWidget 키 Event Handler를 다시 구현하여 이벤트를 처리할 수 있습니다.

       keyPressEvent() Handles a key event when the key is pressed

       keyReleaseEvent() Handles a key event when the key is released

enum Qt::Key

https://doc.qt.io/qt-6/qt.html#Key-enum

 

 

# key_events.py

# Import necessary modules
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel
from PyQt6.QtCore import Qt

class MainWindow(QMainWindow):

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

    def initializeUI(self):
        """Set up the application's GUI."""
        self.setGeometry(100, 100, 300, 200)
        self.setWindowTitle("Event Handling Example")
        info_label = QLabel(
            """<p align='center'>Press the <b>ESC</b> key 
            to close the window.</p>""")
        self.setCentralWidget(info_label)
        self.show()

    def keyPressEvent(self, event):
        """Reimplement the key press event to close the window."""
        if event.key() == Qt.Key.Key_Escape:
            print("Application closed.")
            self.close()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

'Beginning PyQt' 카테고리의 다른 글

QButtonGroup  (0) 2022.05.14
Layout Management  (0) 2022.05.14
Login GUI and Registration Dialog  (0) 2022.05.14
QMessageBox  (0) 2022.05.14
QCheckBox  (0) 2022.05.13