728x90

1. 학습 목표 (Learning Objectives)

:슬라이더(QSlider) 위젯을 사용해 Signal/Slot 구조를 이해

더보기
  1. 슬라이더(QSlider)의 valueChanged(int) Signal 구조 이해
  2. Slider가 Signal을 발생시키며 “값(data)”을 Slot 함수에 자동 전달하는 원리 파악
  3. Slot 함수에서 전달된 정수 값을 처리하는 방법 학습
  4. PySide6에서 슬라이더 값 변경 이벤트를 GUI 로직과 연결하는 방법 학습
  5. 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. 예제 코드

더보기

A. 파이참에서 프로젝트 생성하기

 

파이참에서 프로젝트 생성하기

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 흐름:

  1. 사용자 드래그 → 슬라이더 값 변경
  2. valueChanged(새로운값) 신호 emit (전달)
  3. emit 된 int 값이 Slot 함수의 첫 번째 매개변수로 전달
  4. Slot 함수 실행 → print("slider moved to :", data)
    • 버튼의 clicked(bool)과 완전히 동일한 구조
    • 단지 Signal 파라미터가 int라는 점만 다름

 

slider.show()

B.6 슬라이더 표시

 
 
app.exec()

B.7 앱 실행

 
  • 가동 후 이벤트 루프가 실행됨
  • GUI가 닫힐 때까지 이벤트(슬라이더 이동)가 처리됨


5. Qt 에서 구현

더보기

A. Qt for Python 프로젝트 생성

 

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())