PyQt는 파이썬에서 GUI 애플리케이션을 만들기 위한 강력한 프레임워크입니다. PyQt는 Qt 프레임워크의 파이썬 바인딩이며, Qt는 크로스 플랫폼 애플리케이션 개발을 위한 거의 모든 도구와 기능을 제공합니다.
그래픽 뷰 (QGraphicsView
)는 PyQt에서 제공하는 중요한 위젯 중 하나입니다. 이 뷰를 사용하면 2D 그래픽 항목을 표시하고 상호작용할 수 있는 GUI 애플리케이션을 구축할 수 있습니다.
그래픽 뷰의 기본 사용법
그래픽 뷰를 사용하기 위해 PyQt에서 QGraphicsView
클래스를 임포트해야 합니다. 그런 다음, 그래픽 뷰를 생성하고 윈도우에 추가할 수 있습니다. 다음은 기본적인 그래픽 뷰 사용 예시입니다:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsView, QGraphicsScene
if __name__ == "__main__":
app = QApplication(sys.argv)
# 윈도우 생성
window = QMainWindow()
window.setWindowTitle("그래픽 뷰 예시")
# 그래픽 뷰 생성
view = QGraphicsView(window)
scene = QGraphicsScene()
view.setScene(scene)
# 윈도우 크기 조정
window.setCentralWidget(view)
window.setGeometry(0, 0, 800, 600)
# 윈도우 표시
window.show()
sys.exit(app.exec())
위의 코드는 PyQt 애플리케이션에서 간단한 윈도우를 생성하고, 그래픽 뷰를 추가하여 뷰에 그래픽 항목을 표시합니다.
그래픽 항목 생성 및 표시
그래픽 뷰에 항목을 표시하려면 QGraphicsItem
클래스를 사용해야 합니다. 이 클래스는 그래픽 항목을 생성하고 제어하는 데 사용됩니다.
다음은 간단한 원 그래픽 항목을 생성하고 그래픽 뷰에 추가하는 예시입니다:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsView, QGraphicsScene
from PyQt5.QtGui import QBrush, QPen, QColor
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QGraphicsEllipseItem
if __name__ == "__main__":
app = QApplication(sys.argv)
window = QMainWindow()
window.setWindowTitle("그래픽 항목 예시")
view = QGraphicsView(window)
scene = QGraphicsScene()
view.setScene(scene)
scene.setSceneRect(0, 0, 800, 600) # 장면 크기 설정
# 원 그래픽 항목 생성
brush = QBrush(Qt.red)
pen = QPen(QColor(255, 0, 0))
ellipse = QGraphicsEllipseItem(0, 0, 100, 100)
ellipse.setBrush(brush)
ellipse.setPen(pen)
ellipse.setPos(100, 100) # 항목 위치 설정
# 그래픽 항목 추가
scene.addItem(ellipse)
window.setCentralWidget(view)
window.setGeometry(0, 0, 800, 600)
window.show()
sys.exit(app.exec())
위의 예시 코드에서는 원 그래픽 항목을 생성하고 색상과 펜 스타일을 설정하여 뷰에 추가합니다. 항목의 크기와 위치도 설정할 수 있습니다.
마우스 이벤트 처리
그래픽 뷰(QGraphicsView
)와 그래픽 항목(QGraphicsItem
)은 마우스 이벤트를 처리하는 다양한 기능을 제공합니다. 이를 통해 마우스 클릭, 드래그 및 이동과 같은 사용자 상호작용을 감지하고 대응할 수 있습니다.
다음은 마우스 이벤트 처리를 위한 예시 코드입니다:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsView, QGraphicsScene
from PyQt5.QtGui import QBrush, QPen, QColor
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QGraphicsEllipseItem
class MyGraphicsView(QGraphicsView):
def __init__(self, parent=None):
super().__init__(parent)
def mousePressEvent(self, event):
# 마우스가 그래픽 뷰에서 클릭되었을 때 실행되는 코드
print("마우스가 그래픽 뷰에서 클릭됨")
super().mousePressEvent(event)
def mouseMoveEvent(self, event):
# 마우스가 그래픽 뷰에서 움직였을 때 실행되는 코드
print("마우스가 그래픽 뷰에서 움직임")
super().mouseMoveEvent(event)
def mouseReleaseEvent(self, event):
# 마우스 버튼이 놓여졌을 때 실행되는 코드
print("마우스 버튼 놓음")
super().mouseReleaseEvent(event)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = QMainWindow()
window.setWindowTitle("마우스 이벤트 처리 예시")
view = MyGraphicsView(window) # 커스텀 그래픽 뷰 사용
scene = QGraphicsScene()
view.setScene(scene)
scene.setSceneRect(0, 0, 800, 600)
brush = QBrush(Qt.red)
pen = QPen(QColor(255, 0, 0))
ellipse = QGraphicsEllipseItem(0, 0, 100, 100)
ellipse.setBrush(brush)
ellipse.setPen(pen)
ellipse.setPos(100, 100)
scene.addItem(ellipse)
window.setCentralWidget(view)
window.setGeometry(0, 0, 800, 600)
window.show()
sys.exit(app.exec())
위의 코드에서는 QGraphicsView
클래스를 상속하여 커스텀 그래픽 뷰(MyGraphicsView
)를 만듭니다. 마우스 클릭, 이동 및 버튼 놓기 이벤트를 처리하는 메서드를 오버라이드하여 원하는 동작을 정의할 수 있습니다.
결론
PyQt의 그래픽 뷰(QGraphicsView
)와 그래픽 항목(QGraphicsItem
)은 파이썬으로 강력하고 유연한 GUI 애플리케이션을 개발하는 데 도움이 됩니다. 이 뷰와 항목을 사용하여 다양한 그래픽 요소를 표시하고 사용자 상호작용에 응답하는 애플리케이션을 만들 수 있습니다.