본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] PyQt5 예제로 배우는 GUI 프로그래밍 입문과 실전

by Papa Martino V 2025. 7. 26.
728x90

PyQt5 예제로 배우는 GUI 프로그래밍 입문과 실전
[PYTHON] PyQt5

Python은 웹, 데이터 분석, 인공지능 외에도 GUI 애플리케이션 개발에 강력한 생태계를 자랑합니다. 특히 PyQt5는 Qt 프레임워크를 Python에서 사용할 수 있도록 바인딩한 라이브러리로, 완성도 높은 데스크탑 프로그램을 손쉽게 만들 수 있게 해줍니다. 본 글에서는 초보자도 이해하기 쉬운 방식으로 PyQt5의 기본 구조와 실전 예제를 통해 사용자 인터페이스 구축 방법을 체계적으로 소개합니다.

1. PyQt5란 무엇인가?

PyQt5는 C++ 기반 Qt 프레임워크의 Python 버전입니다. 오픈소스 GUI 툴킷 중 가장 강력하며, 크로스 플랫폼을 지원합니다. Qt Designer를 활용하면 UI 디자인도 시각적으로 구현할 수 있습니다.

주요 특징

  • 다양한 위젯과 컴포넌트 제공
  • 크로스 플랫폼 (Windows, macOS, Linux)
  • Qt Designer를 통한 시각적 개발 가능
  • 강력한 이벤트 처리 및 시그널-슬롯 메커니즘

2. 설치 방법

pip install PyQt5

추가로 UI 파일을 생성할 Qt Designer 설치:

pip install pyqt5-tools

3. 기본 예제: Hello PyQt5


import sys
from PyQt5.QtWidgets import QApplication, QLabel, QWidget

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("PyQt5 첫 앱")
window.setGeometry(100, 100, 280, 80)

label = QLabel("Hello, PyQt5!", parent=window)
label.move(60, 15)

window.show()
sys.exit(app.exec_())
  

이 코드는 간단한 창과 라벨을 표시하는 기본 구조로, 모든 PyQt 애플리케이션의 기본입니다.

4. 실전 예제: 버튼 클릭 이벤트 처리

사용자의 이벤트(버튼 클릭 등)를 처리하려면 시그널과 슬롯 개념을 사용합니다.


from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
import sys

class AppDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('클릭 이벤트 예제')
        self.resize(300, 100)

        self.label = QLabel('아직 클릭하지 않았습니다.', self)
        self.label.move(80, 20)

        btn = QPushButton('클릭하세요', self)
        btn.move(100, 50)
        btn.clicked.connect(self.on_click)

    def on_click(self):
        self.label.setText('버튼이 클릭되었습니다!')

app = QApplication(sys.argv)
demo = AppDemo()
demo.show()
sys.exit(app.exec_())
  

5. UI 파일(.ui) 사용 예제

Qt Designer에서 만든 UI 파일을 Python 코드로 불러와 사용할 수 있습니다.


from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys

class MyApp(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi("my_ui.ui", self)  # Qt Designer에서 만든 UI 파일

app = QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
  

uic.loadUi() 함수는 .ui 파일을 동적으로 로딩하여 Python 코드와 연결해 줍니다.

6. PyQt5 주요 위젯 요약

위젯 설명 사용 예
QLabel 텍스트 또는 이미지 출력 QLabel("텍스트")
QPushButton 버튼 생성 QPushButton("클릭")
QLineEdit 한 줄 입력창 QLineEdit()
QTextEdit 여러 줄 입력창 QTextEdit()
QComboBox 드롭다운 리스트 QComboBox()

7. 팁: 레이아웃 활용하기

위젯 배치는 QVBoxLayout, QHBoxLayout, QGridLayout을 활용하면 유연하게 설정할 수 있습니다.


from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
import sys

app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout()

layout.addWidget(QPushButton("버튼 1"))
layout.addWidget(QPushButton("버튼 2"))

window.setLayout(layout)
window.show()
sys.exit(app.exec_())
  

8. PyQt5 프로젝트 개발 시 주의사항

  • QApplication은 반드시 하나만 존재해야 함
  • 시그널-슬롯 연결 오류는 런타임에 드러나므로 디버깅 필수
  • 무한 루프나 과도한 쓰레딩은 GUI 반응성 저하 유발

9. 참고 자료

10. 마무리

PyQt5는 단순한 스크립트 언어 이상의 데스크탑 애플리케이션을 개발하고자 하는 Python 개발자에게 최고의 선택지 중 하나입니다. 이번 글에서는 PyQt5의 구조, 위젯 활용, 이벤트 처리, 그리고 실전 예제까지 다뤘습니다. 직접 코드를 실행하고 위젯을 조합하며, 사용자 친화적인 앱을 구현해 보세요.

© 2025 PyQt5 Tutorial. All rights reserved.

728x90