업무 자동화/python & CAD

Qt Designer] 시그널(Signal)과 슬롯(Slot)

ToolBOX01 2025. 8. 29. 07:53
반응형

Qt Designer에서 시그널(Signal)과 슬롯(Slot)은 객체 간의 이벤트를 처리하고 통신하는 핵심 메커니즘입니다.

 

  • 시그널:
    특정 이벤트가 발생했을 때 객체가 방출하는 신호입니다. 예를 들어, 버튼이 클릭되면 clicked 시그널이 방출됩니다.
  • 슬롯:
    시그널에 반응하여 실행되는 함수(메서드)입니다.
    시그널이 방출되면 연결된 슬롯이 호출되어 특정 작업을 수행합니다.
  • 연결:
    시그널과 슬롯은 connect 메서드를 통해 연결됩니다.
    이를 통해 이벤트(예: 버튼 클릭)가 발생하면 지정된 슬롯 함수가 자동으로 실행됩니다.

 

Qt의 시그널과 슬롯 메커니즘은 느슨한 결합(loose coupling)을 제공하여 코드의 유연성과 재사용성을 높입니다. Qt Designer에서는 시그널과 슬롯을 GUI에서 시각적으로 연결할 수 있으며, Python 코드에서도 프로그래밍 방식으로 연결 가능합니다.

느슨한 결합(loose coupling)은 소프트웨어 설계 원칙 중 하나로, 시스템의 구성 요소(예: 객체, 모듈, 클래스) 간의 
의존성을 최소화하여 상호작용이 간접적이고 유연하게 이루어지도록 하는 것을 의미합니다.

사용방법 예제) 

 

 


시그널과 슬롯의 작동 원리

1) 시그널 발생: 사용자가 버튼을 클릭하거나 특정 조건이 만족되면 시그널이 방출됩니다.
2) 슬롯 실행: 시그널에 연결된 슬롯 함수가 호출되어 작업을 수행합니다.
3) 연결 방식:

  • Qt Designer: Signal/Slot Editor를 사용해 시각적으로 연결.
  • Python 코드: signal.connect(slot) 메서드를 사용해 연결.

예시 : Qt Designer에서 시그널과 슬롯 연결

Python 코드 대신 Qt Designer에서 시그널과 슬롯을 시각적으로 연결할 수도 있습니다:

  1. Qt Designer에서 Signal/Slot Editor 모드로 전환 (F4 키 또는 메뉴에서 선택).
  2. pushButton의 clicked() 시그널을 label의 setText() 슬롯에 연결.
  3. setText()의 매개변수로 "Button Clicked!"를 입력.
  4. .ui 파일을 저장하고 변환 후, Python 코드에서 추가 연결 없이 실행 가능.

Qt Designer로 연결한 경우 :

  • Qt Designer에서 연결하면 Python 코드에서 connect 호출이 필요 없습니다:

파이썬 코드 예시

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow
from main_window import Ui_MainWindow

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

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

 

by korealionkk@gmail.com


반응형