# [5] 사용자 정의 Signal → 여러 Slot 연결
# ProgressBar 업데이트, LCDNumber 업데이트
self.slider.valueChanged.connect(self.update_progress_bar)
self.processedValueSignal.connect(self.update_lcd)
import sys
from PySide6.QtCore import Qt, Signal, Slot
from PySide6.QtWidgets import QApplication, QWidget, QSlider, QVBoxLayout, QLabel
from PySide6.QtWidgets import QProgressBar, QLCDNumber
class SliderExample(QWidget):
processedValueSignal = Signal(int)
def __init__(self):
super().__init__()
self.setWindowTitle("Signal & Slot 확장 예제")
self.resize(300, 150)
self.label_original = QLabel("원본 값: -")
self.label_processed = QLabel("처리된 값(×2): -")
self.slider = QSlider(Qt.Horizontal)
self.slider.setMinimum(1)
self.slider.setMaximum(100)
self.slider.setValue(25)
# [1] ProgressBar, LCDNumber 추가
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)
self.slider.valueChanged.connect(self.respond_to_slider)
self.processedValueSignal.connect(self.on_processed_value)
# [5] 사용자 정의 Signal → 여러 Slot 연결
# ProgressBar 업데이트, LCDNumber 업데이트
self.slider.valueChanged.connect(self.update_progress_bar)
self.processedValueSignal.connect(self.update_lcd)
layout = QVBoxLayout(self)
layout.addWidget(self.slider)
layout.addWidget(self.label_original)
# [2] ProgressBar, LCDNumber 레이아웃 추가
layout.addWidget(self.progress_bar)
layout.addWidget(self.lcd_number)
layout.addWidget(self.label_processed)
@Slot(int)
def respond_to_slider(self, value):
print("slider moved to:", value)
self.label_original.setText(f"원본 값: {value}")
processed_value = value * 2
self.processedValueSignal.emit(processed_value)
@Slot(int)
def on_processed_value(self, value):
print("커스텀 시그널:", value)
self.label_processed.setText(f"처리된 값(×2): {value}")
# [3] 슬라이더 값 그대로 ProgressBar에 반영
@Slot(int)
def update_progress_bar(self, value):
self.progress_bar.setValue(value)
# [4] 처리된 값(×2)을 LCD에 표시
@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())