Signal & Slot 구조 이해하기 (1)
728x90
1. 학습 목표
: 버튼으로 Signal/Slot 구조와 개념 파악하기
더보기
- Qt의 Signal/Slot 구조 개념을 이해하기에 앞서, 위젯 하나와 함수( ) 의 연결 이해
- 버튼의 clicked 라는 signal 존재 파악
- signal 존재와 slot 역할을 하는 함수의 관계 파악
- connect() 메서드 사용법 이해
- 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. 예제 코드
: 파이참에서 진행합니다.
더보기
파이참에서 프로젝트 생성하기
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 에서 구현
더보기










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