PyQt는 Python의 강력한 GUI 툴킷으로, Qt 프레임워크를 기반으로 하고 있습니다. PyQt를 사용하면 데스크탑 애플리케이션을 쉽고 빠르게 개발할 수 있습니다. 본 강좌에서는 PyQt 프로젝트의 구조와 주요 파일에 대해 자세히 설명하겠습니다. 이 글은 PyQt의 기본 개념을 알고 있는 개발자를 대상으로 하며, 와 함께 예제 코드를 통해 실제 프로젝트에서 어떻게 구조를 잡아야 하는지 알아보겠습니다.
1. PyQt의 기본 개념
PyQt는 Qt 어플리케이션을 파이썬에서 사용할 수 있도록 해주는 바인딩입니다. Qt는 C++로 작성된 GUI 프레임워크로, 크로스 플랫폼 애플리케이션 개발을 지원합니다. PyQt는 다양한 위젯과 툴을 제공하여 데스크탑 애플리케이션을 만들 수 있으므로, 사용자는 인터페이스를 쉽게 개발할 수 있습니다.
1.1 PyQt5 vs PyQt6
현재 PyQt5와 PyQt6 버전이 있습니다. PyQt5는 Qt5를 기반으로 한 반면, PyQt6는 Qt6을 기반으로 하고 있습니다. 새로운 프로젝트를 시작하는 경우 PyQt6을 사용하는 것을 권장하지만, 기존 프로젝트는 PyQt5로 유지할 수 있습니다.
2. PyQt 프로젝트 구조
PyQt 프로젝트는 여러 파일과 디렉토리로 구성됩니다. 일반적인 PyQt 프로젝트 구조는 아래와 같습니다.
my_pyqt_project/ ├── main.py ├── ui/ │ ├── main_window.ui │ └── ... ├── resources/ │ ├── images/ │ └── ... ├── styles/ │ └── main_style.qss └── libs/ └── utility.py
2.1 주요 파일 및 디렉토리 설명
- main.py: 프로젝트의 진입점입니다. 이 파일은 애플리케이션 인스턴스를 생성하고 기본 창을 보여주는 역할을 합니다.
- ui/: Qt Designer로 디자인한 UI 파일을 저장하는 디렉토리입니다. 보통
.ui
확장자를 갖고 있습니다. - resources/: 이미지, 아이콘, 폰트 등의 리소스를 저장하는 디렉토리입니다.
- styles/: 애플리케이션의 스타일을 정의하는
.qss
파일을 저장하는 곳입니다. Qt 스타일 시트를 사용해 UI를 꾸밀 수 있습니다. - libs/: 재사용 가능한 모듈이나 유틸리티 파일을 저장하는 디렉토리입니다.
3. PyQt 프로젝트 예제
이제 간단한 PyQt 프로젝트를 생성해 보겠습니다. 이 프로젝트는 기본적인 GUI를 포함하며, 버튼 클릭 시 메시지 박스가 나타나는 기능을 갖고 있습니다.
3.1 main.py
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt Example")
self.setGeometry(300, 300, 400, 200)
self.button = QPushButton("Click Me", self)
self.button.setGeometry(150, 80, 100, 30)
self.button.clicked.connect(self.show_message)
def show_message(self):
QMessageBox.information(self, "Message", "Button Clicked!", QMessageBox.Ok)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
3.2 UI 디자인
위 링크의 예제 코드는 프로그램의 UI를 코드로 정의한 것입니다. 보다 복잡한 UI를 원한다면, Qt Designer를 사용할 수 있습니다. Qt Designer를 사용하면 Drag-and-Drop 방식으로 위젯을 추가하고, 유저 인터페이스를 디자인할 수 있습니다.
Qt Designer에서 UI 파일 생성하기
- Qt Designer를 엽니다.
- 새로운 Form을 생성하고, 원하는 위젯들을 추가합니다.
- 파일 메뉴에서 “다른 이름으로 저장”을 선택하고,
main_window.ui
로 저장합니다.
4. UI 파일을 파이썬 코드로 변환하기
생성한 main_window.ui
파일을 파이썬 코드로 변환해야 합니다. pyuic5
명령어를 사용하여 UI 파일을 변환할 수 있습니다. 아래와 같은 명령어를 터미널에 입력합니다.
pyuic5 -x ui/main_window.ui -o ui/main_window.py
이제, 생성된 main_window.py
파일을 가져와 main.py
에서 사용해 보겠습니다.
from ui.main_window import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.button.clicked.connect(self.show_message)
5. 애플리케이션의 스타일 설정
애플리케이션의 스타일을 설정하기 위해 QSS
파일을 사용할 수 있습니다. 아래는 기본 스타일을 설정하는 main_style.qss
파일의 예입니다.
QMainWindow {
background-color: #f0f0f0;
}
QPushButton {
background-color: #4CAF50;
color: white;
}
QPushButton:hover {
background-color: #45a049;
}
5.1 스타일 적용하기
스타일을 적용하려면 main.py
파일에서 QSS 파일을 로드해야 합니다. 아래 코드를 추가합니다.
def load_css(self):
with open("styles/main_style.qss", "r") as f:
self.setStyleSheet(f.read())
위의 함수를 생성자에 호출하면 스타일이 적용됩니다.
6. 에러 처리 및 로깅
프로젝트의 안정성을 높이기 위해 에러 처리는 필수적입니다. 예를 들어, 버튼 클릭 이벤트에서 에러가 발생할 가능성이 있다면, try-except 문을 사용하여 에러를 처리할 수 있습니다.
def show_message(self):
try:
# 비즈니스 로직
QMessageBox.information(self, "Message", "Button Clicked!", QMessageBox.Ok)
except Exception as e:
QMessageBox.critical(self, "Error", str(e), QMessageBox.Ok)
7. 마무리
이번 글에서는 PyQt 프로젝트의 구조와 주요 파일에 대해 알아보았습니다. 또한 기본적인 예제를 통해 PyQt를 사용하여 애플리케이션을 만드는 과정을 설명했습니다. PyQt를 활용하면 사용자 인터페이스를 쉽고 빠르게 개발할 수 있으며, 다양한 기능과 스타일을 적용할 수 있습니다. 앞으로 더 복잡한 애플리케이션을 만들어보며 PyQt의 매력을 느껴보시기 바랍니다.
감사합니다!