• 티스토리 홈
  • 프로필사진
    소쩍소쩍이
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
소쩍소쩍이
  • 프로필사진
    소쩍소쩍이
    • 분류 전체보기 (51) N
      • 파이썬 (18)
        • 문제 및 예제 (8)
      • PySide6 (15) N
        • Signal & Slot (6)
        • Layout (8)
        • Model & View (1) N
      • 리눅스 (5)
      • 아두이노 (0)
      • 일지 (11)
  • GitHub
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    # Home
    # 공지사항
    #
    # 태그
    # 검색결과
    # 방명록
    • 사용자 정의 시그널
      2026년 05월 26일
      • 소쩍소쩍이
      • 작성자
      • 2026.05.26.:52

      사용자 정의 Signal(Custom Signal)

      실제 프로그램을 만들다 보면 Qt가 기본으로 제공하는 Signal만으로 부족할 때가 있다.

      예를 들어 슬라이더 값을 그대로 사용하는 것이 아니라 값을 가공한 뒤 다른 함수나 위젯으로 전달하거나,
      프로그램 내부에서 새로운 이벤트 흐름을 만들고 싶을 때 사용자 정의 Signal을 사용한다.

       

      emit()

      Signal을 실제로 발생시키고 값을 전달할 때 사용하는 메서드

      self.processedValueSignal.emit(processed_value)

      위 코드는 processed_value 값을 함께 전달하면서 사용자 정의 Signal을 발생시킨다.

       

      사용자 정의 Signal 선언 방법

      mysignal = Signal(자료형)
      Signal 선언 예시

      Signal() → 값을 전달하지 않는 Signal
      Signal(int) → 정수 값을 하나 전달하는 Signal
      Signal(str) → 문자열 값을 하나 전달하는 Signal
      Signal(int, str) → 정수와 문자열을 함께 전달하는 Signal

       

      중요한 점

      사용자 정의 Signal은 반드시 클래스 변수로 선언해야 한다.

      __init__() 안에서 self.mysignal 형태로 만들면 안 된다.

      Signal은 객체마다 달라지는 데이터가 아니라 클래스가 공통으로 사용하는 이벤트 기능이기 때문이다.

      class Example(QWidget):
      
          mysignal = Signal(int)

       

      @Slot()

      Slot 함수가 어떤 자료형을 받을지 더 명확하게 표현하고 싶을 때 사용하는 데코레이터

      @Slot 사용 예시

      @Slot → 작은 예제에서는 생략해도 동작함
      @Slot(int) → 정수 값을 받는 Slot 함수임을 나타냄
      @Slot(int, str) → 정수와 문자열을 받는 Slot 함수임을 나타냄

      사용자 정의 Signal 예제

      import sys
      
      from PySide6.QtCore import (
          Qt,
          Signal,
          Slot
      )
      
      from PySide6.QtWidgets import (
          QApplication,
          QWidget,
          QSlider,
          QVBoxLayout,
          QLabel
      )
      
      
      class SliderExample(QWidget):
      
          processedValueSignal = Signal(int)
      
          def __init__(self):
              super().__init__()
      
              self.setWindowTitle("사용자 정의 Signal 예제")
              self.resize(300, 150)
      
              self.label_original = QLabel("원본 값: -")
              self.label_processed = QLabel("처리된 값(x2): -")
      
              self.slider = QSlider(Qt.Horizontal)
      
              self.slider.setMinimum(1)
              self.slider.setMaximum(100)
              self.slider.setValue(25)
      
              self.slider.valueChanged.connect(
                  self.respond_to_slider
              )
      
              self.processedValueSignal.connect(
                  self.on_processed_value
              )
      
              layout = QVBoxLayout(self)
      
              layout.addWidget(self.slider)
              layout.addWidget(self.label_original)
              layout.addWidget(self.label_processed)
      
          @Slot(int)
          def respond_to_slider(self, value):
      
              self.label_original.setText(
                  f"원본 값: {value}"
              )
      
              processed_value = value * 2
      
              self.processedValueSignal.emit(
                  processed_value
              )
      
          @Slot(int)
          def on_processed_value(self, value):
      
              self.label_processed.setText(
                  f"처리된 값(x2): {value}"
              )
      
      
      if __name__ == "__main__":
      
          app = QApplication(sys.argv)
      
          window = SliderExample()
          window.show()
      
          sys.exit(app.exec())

      위 코드를 실행시키면 슬라이더 값이 변경될 때마다 원본 값과 처리된 값이 함께 출력된다.


      동작 흐름

      1. 사용자가 슬라이더 이동
      ↓
      2. valueChanged(int) Signal 발생
      ↓
      3. respond_to_slider(value) 실행
      ↓
      4. value * 2 처리
      ↓
      5. processedValueSignal.emit(processed_value) 실행
      ↓
      6. on_processed_value(value) 실행
      ↓
      7. QLabel 텍스트 변경
      정리

      Signal → 이벤트 발생 알림
      emit() → Signal을 실제로 발생시키는 메서드
      사용자 정의 Signal → 프로그램 내부에서 새로운 이벤트 흐름 생성
      @Slot() → Slot 함수의 인자 타입을 명확하게 표시

      'PySide6 > Signal & Slot' 카테고리의 다른 글

      다중 시그널 / 단일 슬롯  (0) 2026.05.26
      단일 시그널 / 다중 슬롯  (0) 2026.05.26
      QSlider 값 전달  (0) 2026.05.26
      Data(값) 전달  (0) 2026.05.26
      Signal & Slot 개념  (0) 2026.05.26
      다음글
      다음 글이 없습니다.
      이전글
      이전 글이 없습니다.
      댓글
    조회된 결과가 없습니다.
    스킨 업데이트 안내
    현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
    ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바