- 단일 시그널 / 다중 슬롯2026년 05월 26일
- 소쩍소쩍이
- 작성자
- 2026.05.26.:20
Qt의 Signal / Slot 구조에서는 하나의 Signal에 여러 Slot을 연결할 수 있다.
하나의 이벤트가 발생했을 때 여러 함수가 동시에 실행되도록 구성할 수 있으며, 각 Slot은 서로 다른 화면 요소를 갱신할 수 있다.
이번 예제에서는 슬라이더 값을 이용해 Label, ProgressBar, LCDNumber를 동시에 변경한다.
사용되는 Signal
QSlider.valueChanged(int)
슬라이더 값이 변경될 때 발생하는 기본 Signal
processedValueSignal
슬라이더 값을 가공한 뒤 전달하기 위해 만든 사용자 정의 Signal연결되는 Slot
respond_to_slider(value)
원본 값을 Label에 표시하고 처리된 값을 emit()
update_progress_bar(value)
원본 값을 ProgressBar에 반영
handle_processed_value(value)
가공된 값을 Label에 표시
update_lcd(value)
가공된 값을 LCDNumber에 표시즉 슬라이더를 움직이면 여러 Slot 함수가 동시에 실행되면서 여러 위젯이 함께 갱신된다.
예제 코드
import sys from PySide6.QtCore import Qt, Signal, Slot from PySide6.QtWidgets import ( QApplication, QWidget, QSlider, QVBoxLayout, QLabel, QProgressBar, QLCDNumber ) class SliderExample(QWidget): processedValueSignal = Signal(int) def __init__(self): super().__init__() self.setWindowTitle("단일 Signal / 다중 Slot 예제") self.resize(300, 220) self.label_original = QLabel("원본 값: -") self.label_processed = QLabel("처리된 값(×2): -") self.slider = QSlider(Qt.Horizontal) self.slider.setRange(1, 100) self.slider.setValue(25) self.progress_bar = QProgressBar() self.progress_bar.setRange(0, 100) self.progress_bar.setValue(25) self.lcd_number = QLCDNumber() self.lcd_number.setDigitCount(3) self.lcd_number.display(50) # 하나의 Signal에 여러 Slot 연결 self.slider.valueChanged.connect(self.respond_to_slider) self.slider.valueChanged.connect(self.update_progress_bar) # 사용자 정의 Signal에 여러 Slot 연결 self.processedValueSignal.connect(self.handle_processed_value) self.processedValueSignal.connect(self.update_lcd) layout = QVBoxLayout(self) layout.addWidget(self.slider) layout.addWidget(self.label_original) layout.addWidget(self.progress_bar) layout.addWidget(self.lcd_number) 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 handle_processed_value(self, value): self.label_processed.setText( f"처리된 값(×2): {value}" ) @Slot(int) def update_progress_bar(self, value): self.progress_bar.setValue(value) @Slot(int) def update_lcd(self, value): self.lcd_number.display(value) if __name__ == "__main__": app = QApplication(sys.argv) window = SliderExample() window.show() sys.exit(app.exec())1. valueChanged(int)
슬라이더 값이 변경될 때마다 현재 값을 전달하는 Signal
2. 여러 Slot 연결
하나의 Signal에 여러 Slot을 연결했기 때문에
슬라이더를 움직이면 Label과 ProgressBar가 동시에 갱신됨
3. 값 가공
respond_to_slider()에서 전달받은 값을 2배로 처리
4. emit() 실행
processedValueSignal.emit()으로 처리된 값을 전달하면서
사용자 정의 Signal 발생
5. 여러 Slot 동시 실행
emit()으로 전달된 값은
handle_processed_value()와 update_lcd()로 동시에 전달됨
6. 최종 결과
하나의 Signal은 여러 Slot을 실행할 수 있으며
각 Slot은 서로 다른 역할을 담당할 수 있음
동작 흐름
1. 사용자가 슬라이더 이동
↓
2. valueChanged(int) Signal 발생
↓
3. respond_to_slider(value) 실행
↓
4. value * 2 처리
↓
5. processedValueSignal.emit(processed_value) 실행
↓
6. handle_processed_value(value) 실행
↓
7. update_lcd(value) 실행
↓
8. ProgressBar / QLabel / LCDNumber 갱신구성 요소 설명 단일 Signal 하나의 이벤트 발생 신호 다중 Slot 하나의 Signal에 여러 Slot 함수 연결 가능 valueChanged(int) 슬라이더 값이 변경될 때 발생하는 기본 Signal processedValueSignal 처리된 값을 전달하기 위한 사용자 정의 Signal QProgressBar 원본 값을 진행률 형태로 표시 QLCDNumber 처리된 값을 숫자 형태로 표시 정리
하나의 Signal은 여러 Slot에 연결할 수 있다.
valueChanged(int)는 슬라이더의 현재 값을 전달한다.
사용자 정의 Signal은 가공된 값을 다른 위젯이나 함수로 전달할 때 유용하다.
emit()은 Signal을 실제로 발생시키는 메서드이다.'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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)