- 사용자 정의 시그널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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)