ㅇ 일 자 : 2026년 5월 15일(금)
ㅇ 주 제 : Qt Creator 활용과 클래스 이해
ㅇ 내 용
1. "클래스(class)에 대한 이해"
가. 외부 수정을 제한하기 위해 변수는 하나의 자료형으로 '캡슐화'한다. 상속을 받아서 확장해서 사용할 수 있다.
나. 클래스
원본에 영향을 주지 않는 객체지향 프로그래밍 핵심, 똑같은 모양의 객체를 만들어 내기 위한 설계도(빵틀)
데이터(속성)과 함수(메서드)를 한데 묶는다
다. 상속(Inheritance):
상속이란 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소를 의미
상속은 클래스의 확장 개념이다.
예) 클래스1을 만들면 만약 중복되는 부분을 하나의 클래스로 만들어 놓고 여러개의 묶음을 생성할 수 있다
라. 추상화(Abstration):
클래스에서의 추상화는 모든 사물들을 클래스로 코드화를 해서 만드는 것
사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것 (공통성과 본질을 모아 추출)
예)지하철 노선도
마. 의존성의 문제 : 의지해야만 존재하는 코드, 클래스에 다른 클래스가 있어야만 존재하는 데 유지관리가 어려운 문제가 발생한다
- 위젯안에 위젯 동물들을 더 추가하고자 할때 의존성 문제로 애러가 발생한다.
- 위젯클래스 : 추가부분, 실행부분을 모두 수정해야 하는데 실행하는 부분까지 찾아가서 수정을 해야 하는데 여러명이 공동개발한 프로그램이라면 문제가 발생한다.
- 개발자1은 '소'를 추가하고, 개발자2는 '호랑이'를 추가했을 때 :
추가된 양과 소가 통합되어서 저장되야 하고, 동물원 클래스에는 양과 소가 있어야 하는데 동물원class가 서로 달라 누군가는 통합해야 하는 것이다. 근데 호랑이class를 더 추가해야 할 때 추가부분, 실행부분을 함께 self 수정해야 하는데 여러명이 동시에 수정하게 된다면 기존에 만들어진 실행부까지 찾아가서 수정해 주어야 하니 관리가 매우 어렵게 된다.
| 예) Dependency Inversion : 클래스안에 클래스가 존재해야지만 동작한다. High level(동물원class) -> Low level Module -> (강아지class,고양이class, 사자class,늑구...) High level(동물원class) -> Animal(추상화) -> 강아지class,고양이class,사자,늑구...) |
※ 의존성 문제 해결방법 :
ㅇ 추상화된 인터페이스를 생성한다. (클래스1 --- 인터페이스 --- 클래스2)
ㅇ 추상화라는 것을 사용하여 공통된 특성을 가진 코드들을 추상화 시킨다.
예) 사람얼굴 사진 --> 스케치 그림 --> 이모티콘 버튼
ㅇ 클래스 추상화를 활용하여 외부라이브러리에서 실행부를 받아 사용해도 문제가 발행하지 않는다.
(예시 1)
# from 파일경로 import class에 해당하는 코드를 하단에서 사용(class,ded함수 단위)
# 외부 라이브러리에서 상속받은 클래스(QMainWindow...)
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
class MyWindow(QMainWindow): #생성자 객체가 만들어질때 실행되는 초기화 함수
def __init__(self): # def함수 추가 확장, class에 객체들 가져와서 사용
super().__init__()
self.setWindowTitle("QMainWindow Example") # self 속성
label = QLabel("Hello QMainWindow!")
self.setCentralWidget(label) # self 속성
app = QApplication([])
window = MyWindow()
window.show()
app.exec()
(예시 2)
# tests/test_app.py
import unittest
from app import app # from 파일경로 import class에 해당하는 코드를 하단에서 사용(class,def 함수 단위)
# 클래스 변수는 하나의 자료형으로 캡슐화한다.
class TestAppRoutes(unittest.TestCase): #생성자 객체가 만들어질때 실행되는 초기화 함수
def setUp(self): #추상화 된 ""인터페이스""를 생성한다.
self.app = app.test_client() # self 의존성: 클래스에 다른 클래스가 있어야만 존재하는 것
self.app.testing = True
def test_hello_route(self):
response = self.app.get('/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data.decode('utf-8'), "Hello, Flask!")
def test_add_item_route(self):
response = self.app.post('/items', json={"name": "item1"})
self.assertEqual(response.status_code, 201)
self.assertEqual(response.get_json(), {'message': 'Item added successfully'})
def test_get_item_route(self):
response = self.app.get('/items/0')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.get_json(), {'item': {'name': 'item1'}})
def test_get_nonexistent_item_route(self):
response = self.app.get('/items/1')
self.assertEqual(response.status_code, 404)
self.assertEqual(response.get_json(), {'error': 'Item not found'})
if __name__ == '__main__':
unittest.main()
#2. Signal & Slot 구조 이해
가. 시그널 : 어떤 일이 발생했음을 알려주는 신호, 버튼 클릭시 시그널 발생한다
나. 슬롯 : 함수 혼자서는 자동실행이 되지 않는다. 시그널과 연결(connect)되서 버튼 클릭시 실행된다.
button.clicked.connect(button_clickde) # 버튼 클릭해서 신호가 발생하면, 함수가 자동실행된다.
(예시1)
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()
(예시2)
import QtQuick
import QtQuick.Window
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
}
☆파이썬에서 버튼 만들기

☆ Qt에서 디자인 활용하기

☆파이썬에서 Qt 위젯 이해 : 이동바를 실행시켜 슬라이드값 출력값의 이동함을 보여준다

☆ 버튼을 만들어 레이아웃 살펴보기

2. Signal & Layout
☆ Qt디자인에서 버튼을 끌어놓으면 정렬이 안되었다면 Ctrl+a을 눌러 개체 전부 선택후 Layout정렬을 시켜준다. 버튼정렬됨


'학습 로그 > Python3' 카테고리의 다른 글
| D+35 [Layout] 레이아웃 종합 예제 학습(1) (0) | 2026.05.27 |
|---|---|
| D+32 [Qt for Python] Designer 적용 구조 및 Layout 이해 (0) | 2026.05.21 |
| D+24 [Python3] Team Project(kiosk) 리뷰 (0) | 2026.05.11 |
| D+23 [PyCharm PySide6] 실습 및 주석 활용 (0) | 2026.05.11 |
| D+18 [Team Porject] KIOSK (0) | 2026.04.28 |