
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의 구조, 위젯 활용, 이벤트 처리, 그리고 실전 예제까지 다뤘습니다. 직접 코드를 실행하고 위젯을 조합하며, 사용자 친화적인 앱을 구현해 보세요.
'Artificial Intelligence > 60. Python' 카테고리의 다른 글
| [PYTHON] pathlib으로 더 똑똑하게 파일 처리하기 (0) | 2025.07.26 |
|---|---|
| [PYTHON] 클래스 vs 함수 : 언제 클래스를 사용하고, 언제 함수가 더 적합할까? (0) | 2025.07.26 |
| [PYTHON] pip 설치 오류 : 자주 발생하는 문제와 해결 가이드 (0) | 2025.07.25 |
| [PYTHON] Redis‑Py : Python용 Redis 커넥터 완벽 가이드 (0) | 2025.07.25 |
| [PYTHON] pandas groupby 예제 : 실전 활용 완전 정복 (0) | 2025.07.25 |