Signal & Slot 구조 이해하기 (3)
728x90
1. 학습 목표 (Learning Objectives)
:슬라이더(QSlider) 위젯을 사용해 Signal/Slot 구조를 이해
더보기
- 슬라이더(QSlider)의 valueChanged(int) Signal 구조 이해
- Slider가 Signal을 발생시키며 “값(data)”을 Slot 함수에 자동 전달하는 원리 파악
- Slot 함수에서 전달된 정수 값을 처리하는 방법 학습
- PySide6에서 슬라이더 값 변경 이벤트를 GUI 로직과 연결하는 방법 학습
- Signal/Slot 구조가 버튼 외에도 다양한 위젯에서 동일하게 작동함을 이해
2. Signal / Slot 개념 이해하기 —
: QSlider
더보기
- QSlider 위젯
- 막대를 드래그하여 값을 조절하는 위젯
- 가로 방향/세로 방향 지원 (Qt.Horizontal, Qt.Vertical)
- 최소값(min), 최대값(max), 현재값(value) 설정 가능
1) Signal
- valueChanged(int)
슬라이더 값이 바뀔 때마다 자동으로 emit - emit될 때 슬라이더의 움직임 정도 값(int) 을 함께 전달
값이 25 → 26으로 바뀌면, valueChanged(26) 처럼 전달 - 이 int 값은 Slot 함수의 첫 번째 매개변수로 자동 전달됨
2) Slot
- Signal이 전달하는 값을 받아 처리하는 함수
- def respond_to_slider(data): print("slider moved to :", data)
- data ← valueChanged 신호에서 자동으로 전달된 숫자
3) connect()
slider.valueChanged.connect(respond_to_slider)
- Signal → Slot 연결 문법:
- 슬라이더의 값이 변경될 때마다 Slot 함수 자동 실행
- Signal의 int 값이 Slot의 인자로 자동 전달됨
3. 예제 코드
더보기
파이참에서 프로젝트 생성하기
1. 일반 프로젝트 생성하기더보기 2. 새 프로젝트 시작하기더보기Case A. 새 프로젝트 생성 Case B. 새 프로젝트 생성 Case C. 새 프로젝트 생성 3. 커스텀 가상환경으로 프로젝트 시작하기 더보기
basiclike.tistory.com
B. 예제 코드
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QSlider
def respond_to_slider(data):
print("slider moved to : ", data)
app = QApplication()
slider = QSlider(Qt.Horizontal)
slider.setMinimum(1)
slider.setMaximum(100)
slider.setValue(25)
slider.valueChanged.connect(respond_to_slider)
slider.show()
app.exec()
| 개념 | 설명 |
| valueChanged(int) | 슬라이더 값이 변경될 때 int 값을 전달하는 Signal |
| Slot(data) | Slot 함수는 전달된 int 값을 자동으로 첫 번째 인자로 수신 |
| setMinimum / setMaximum | 슬라이더의 최소값/최대값 설정 |
| setValue | 슬라이더 초기값 설정 |
| connect() | Signal과 Slot을 연결하는 PySide6의 핵심 구조 |
C. 예제 파일
main.py
0.00MB
4. 코드 분석
더보기
A. 주석 처리된 코드
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QSlider
# [슬롯 함수] : valueChanged(int) Signal이 보내는 값을 받는 함수
def respond_to_slider(data):
print("slider moved to :", data)
# [1] Qt 애플리케이션 생성
app = QApplication()
# [2] 슬라이더 생성 (가로 방향)
slider = QSlider(Qt.Horizontal)
# [3] 슬라이더 설정
slider.setMinimum(1) # 최소값
slider.setMaximum(100) # 최대값
slider.setValue(25) # 초기값
# [4] Signal과 Slot 연결
# - valueChanged(int) Signal은 슬라이더 값이 바뀔 때마다 emit
# - emit되는 int 값이 respond_to_slider() 함수의 data 인자로 자동 전달됨
slider.valueChanged.connect(respond_to_slider)
# [5] 위젯 표시
slider.show()
# [6] 이벤트 루프 실행
app.exec()
B. 단계별 분석
from PySide6.QtCore import Qt from PySide6.QtWidgets import QApplication, QSlider
B.1 라이브러리 가져오기
- Qt: 방향 설정(Qt.Horizontal) 등에 사용
- QSlider: 슬라이더 위젯
- QApplication: 앱 실행 환경
def respond_to_slider(data):
print("slider moved to :", data)
B.2 Slot 함수 정의
- data ← valueChanged 신호에서 자동 전달
- 사용자가 손잡이를 움직일 때마다 최신 숫자가 출력됨
app = QApplication()
B.3 QApplication 생성
slider = QSlider(Qt.Horizontal)
slider.setMinimum(1)
slider.setMaximum(100)
slider.setValue(25)
B.4 슬라이더 생성 + 초기 설정
- 슬라이더를 수평 방향으로 표시
- minimum=1, maximum=100
- 초기값 = 25
slider.valueChanged.connect(respond_to_slider)
B.5 Signal / Slot 연결
Signal → Slot 흐름:
- 사용자 드래그 → 슬라이더 값 변경
- valueChanged(새로운값) 신호 emit (전달)
- emit 된 int 값이 Slot 함수의 첫 번째 매개변수로 전달
- Slot 함수 실행 → print("slider moved to :", data)
- 버튼의 clicked(bool)과 완전히 동일한 구조
- 단지 Signal 파라미터가 int라는 점만 다름
slider.show()
B.6 슬라이더 표시
app.exec()
B.7 앱 실행
- 가동 후 이벤트 루프가 실행됨
- GUI가 닫힐 때까지 이벤트(슬라이더 이동)가 처리됨
5. Qt 에서 구현
더보기










Qt for Python 프로젝트 생성
1. Qt for Python 템플릿으로 프로젝트 생성더보기 2. 실행 테스트더보기
basiclike.tistory.com
B.


C


D



E.


import sys
from PySide6.QtWidgets import QApplication, QWidget
from ui_form import Ui_Widget
class Widget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_Widget()
self.ui.setupUi(self)
# [슬라이더의 valueChanged(int) Signal → respond_to_slider Slot 연결]
self.ui.horizontalSlider.valueChanged.connect(self.respond_to_slider)
# [✓] 슬라이더 값 변경 시 호출될 슬롯 함수
def respond_to_slider(self, data):
print("slider moved to :", data)
if __name__ == "__main__":
app = QApplication(sys.argv)
widget = Widget()
widget.show()
sys.exit(app.exec())
