728x90

 

1. 학습 목표

: 버튼으로 Signal/Slot 구조와 개념 파악하기

더보기
  1. Qt의 Signal/Slot 구조 개념을 이해하기에 앞서, 위젯 하나와 함수( ) 의 연결 이해
  2. 버튼의 clicked 라는 signal 존재 파악
  3. signal 존재와 slot 역할을 하는 함수의 관계 파악
  4. connect() 메서드 사용법 이해
  5. PySide6 에서 가장 기본적인 GUI 이벤트 처리 구현

 

2. Signal / Slot 개념 이해하기

: QPushButton

더보기

1) Signal

  • “어떤 일이 발생했다”는 기능 동작의 시작점 (이벤트 알림)
  • QPushButton에는 clicked라는 signal이 미리 정의되어 있음
    (버튼이 클릭될 때 자동으로 emit(전송))

 

 

2) Slot

  • signal 다음 실행되는 함수
  • 특별한 문법 없이 일반 함수도 slot처럼 사용 가능

 

 

3) connect

button.clicked.connect(button_clicked)
  • Signal → Slot 연결 문법(syntax)
  • clicked 라는 Signal 이 발생하면 → button_clicked() 이라는 Slot 함수가 자동 호출
 

 

3. 예제 코드

: 파이참에서 진행합니다.

더보기

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

 

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

1. 일반 프로젝트 생성하기더보기 2. 새 프로젝트 시작하기더보기Case A. 새 프로젝트 생성 Case B. 새 프로젝트 생성 Case C. 새 프로젝트 생성 3. 커스텀 가상환경으로 프로젝트 시작하기 더보기

basiclike.tistory.com

 

 

B. 예제 코드

from PySide6.QtWidgets import QApplication, QPushButton

def button_clicked():
    print("버튼을 클릭하셨네요!")

app = QApplication()

button = QPushButton("Press Me")   # QApplication 위 버튼에 표시될 텍스트

button.clicked.connect(button_clicked)

button.show()

app.exec()

개념  설명
Signal  이벤트 발생을 알리는 메시지. (예: clicked)
Slot  해당 신호를 받았을 때 실행되는 함수
connect() signal과 slot을 연결하는 Qt의 핵심 메커니즘

 

  

C. 예제 파일

main.py
0.00MB

 

4. 코드 분석

더보기

A. 주석

from PySide6.QtWidgets import QApplication, QPushButton

# [슬롯으로 사용할 함수] : 버튼 클릭(signal)을 받으면 실행될 함수
def button_clicked():
    print("버튼을 클릭하셨네요!")

# [1] Qt 애플리케이션 생성
#     - 모든 Qt 프로그램은 QApplication 객체가 반드시 하나 필요함
app = QApplication()

# [2] 버튼 위젯 생성
button = QPushButton("Press Me")   # QApplication 위 버튼에 표시될 텍스트

# [3] 시그널과 슬롯 연결
#     - QPushButton은 기본적으로 'clicked' Signal 이 구현되어 있음
#     - 사용자가 버튼을 클릭하면 clicked Signal 이 자동으로 발생(emit)
#     - connect()를 통해 clicked → button_clicked 함수(슬롯) 연결
button.clicked.connect(button_clicked)

# [4] 버튼 화면에 표시
button.show()

# [5] 이벤트 루프 실행
#     - GUI 프로그램이 종료될 때까지 사용자 입력(클릭, 키보드 등)을 처리함
app.exec()

 

 

B. 단계별 분석

 

from PySide6.QtWidgets import QApplication, QPushButton

B.1 라이브러리 가져오기

  • GUI 앱을 만드는 데 필요한 모듈
  • QApplication: 앱 실행 환경
  • QPushButton: 버튼 위젯

 

def button_clicked():
    print("버튼을 클릭하셨네요!")

B.2 Slot 함수 정의

  • 버튼이 눌렸다는 signal을 받으면 실행될함수
  • Qt에서는 이런 함수를slot이라고 부름
  • 특별한 데코레이터 없이 일반 함수로 작성해도 됨

 

app = QApplication()

B.3 QApplication 생성

  • 모든 Qt 프로그램은 반드시 하나의 QApplication이 필요
  • 이벤트 루프(Event Loop)를 관리함
    (마우스 클릭, 키 입력 등 처리)

 

button = QPushButton("Press Me")

B.4 버튼 생성

 
  • GUI 화면에서 보여질 버튼 객체 생성
  • "Press Me"는 버튼에 표시될 텍스트

 

button.clicked.connect(button_clicked)

B.5 시그널과 슬롯 연결

  • clicked signal이 발생하면
    → button_clicked() 함수가 자동 호출되는 구조
  • 이것이 Qt의 핵심인 Signal / Slot 메커니즘

 

button.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)

        # [✓] 클래스 내부 메서드는 self로 연결해야 함
        self.ui.pushButton.clicked.connect(self.button_clicked)

    # [✓] 클래스 내부에서 호출될 슬롯은 self 인자를 가져야 함
    def button_clicked(self):
        print("버튼을 클릭하셨네요!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = Widget()
    widget.show()
    sys.exit(app.exec())