반응형
PySide6에서 화면 로딩 중 마우스 포인터 변경하는 방법
📝 소개
GUI 애플리케이션을 만들다 보면, 사용자가 버튼을 클릭했을 때 시간이 오래 걸리는 작업(예: 데이터 처리, 파일 로드 등)이 있을 수 있습니다. 이때 사용자는 프로그램이 멈춘 것처럼 보일 수도 있기 때문에 "로딩 중"이라는 시각적 피드백을 주는 것이 중요합니다. 이번 포스팅에서는 PySide6에서 화면 로딩 중 마우스 포인터의 형태를 변경하여 사용자 경험(UX)을 개선하는 방법을 정리했습니다.
🎯 목표
- PySide6에서 마우스 포인터를 변경하는 방법을 배운다.
- QApplication.setOverrideCursor()와 QApplication.restoreOverrideCursor()의 사용법을 익힌다.
- 버튼 클릭 시 시간이 오래 걸리는 작업을 실행할 때 마우스 포인터를 로딩 상태(WaitCursor)로 변경하고, 작업 완료 후 원래 상태로 복원한다.
📌 마우스 포인터 변경하기
마우스 포인터를 로딩 상태로 변경하는 기본적인 과정은 다음과 같습니다.
- 긴 작업을 실행하기 전에 **QApplication.setOverrideCursor(Qt.WaitCursor)**를 호출하여 마우스 포인터를 로딩(회전하는 커서) 상태로 변경한다.
- 시간이 오래 걸리는 작업을 실행한다.
- 작업이 끝난 후 **QApplication.restoreOverrideCursor()**를 호출하여 원래의 마우스 포인터로 복원한다.
📌 예제 코드
아래는 버튼을 클릭하면 3초 동안 긴 작업을 실행하는 동안 마우스 포인터가 로딩 상태로 변경되는 코드입니다.
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
from PySide6.QtCore import QTimer
from PySide6.QtGui import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Mouse Pointer Example")
self.resize(400, 300)
# 버튼 생성
self.button = QPushButton("Start Long Operation")
self.button.clicked.connect(self.start_long_operation)
# 레이아웃 설정
layout = QVBoxLayout()
layout.addWidget(self.button)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def start_long_operation(self):
"""긴 작업을 실행하는 동안 마우스 포인터 변경"""
QApplication.setOverrideCursor(Qt.WaitCursor) # 마우스 포인터 변경
# 실제 긴 작업 (여기서는 QTimer로 3초간 대기)
QTimer.singleShot(3000, self.end_long_operation) # 3초 후 작업 완료
def end_long_operation(self):
"""작업이 완료되면 마우스 포인터 복원"""
QApplication.restoreOverrideCursor() # 마우스 포인터 원래대로 복원
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
# MainWindow 실행
window = MainWindow()
window.show()
sys.exit(app.exec())
반응형
📌 코드 설명
단계 | 내용 |
1. QApplication.setOverrideCursor(Qt.WaitCursor) | 마우스 포인터를 로딩 상태로 변경 |
2. QTimer.singleShot(3000, self.end_long_operation) | 3초 동안 긴 작업을 시뮬레이션 |
3. QApplication.restoreOverrideCursor() | 작업이 끝나면 마우스 포인터를 원래 상태로 복원 |
📌 실행 결과
✅ 버튼을 클릭하면 마우스 포인터가 "로딩(회전)" 상태로 변경됩니다.
✅ 3초 후 마우스 포인터가 원래 상태로 복원됩니다.
✅ UI가 멈추지 않고 응답성을 유지하며, 사용자에게 작업이 진행 중이라는 시각적 피드백을 제공합니다.
📌 확장 가능성
위 코드에서는 QTimer를 사용하여 3초간 기다리도록 했지만, 실제로는 시간이 오래 걸리는 작업을 QThread를 사용하여 백그라운드에서 실행할 수 있습니다.
- 비동기 작업 처리:
- QThread를 사용하여 UI가 멈추지 않도록 한다.
- 마우스 포인터는 QThread 작업이 끝날 때까지 WaitCursor 상태를 유지한다.
- 다양한 마우스 포인터 스타일 적용:
- Qt.ArrowCursor: 기본 화살표 커서
- Qt.BusyCursor: 로딩 상태의 다른 스타일
- Qt.CrossCursor: 십자형 커서 등
📌 주의할 점
- 마우스 포인터 복원을 잊지 말 것
- QApplication.restoreOverrideCursor()를 호출하지 않으면 프로그램이 종료될 때까지 마우스 포인터가 계속 로딩 상태로 유지됩니다.
- 실제 긴 작업에서는 QThread 사용 고려
- QTimer는 단순한 지연을 위한 것이며, 실제 데이터 처리나 복잡한 작업을 실행하려면 QThread 또는 QRunnable을 사용하는 것이 좋습니다.
반응형
'코딩취미 > Python' 카테고리의 다른 글
파이썬에서 특정 클래스의 멤버 함수를 확인하는 방법 (0) | 2025.02.20 |
---|---|
PySide6에서 QTreeView 스타일시트 선택자 정리 및 활용법 (0) | 2025.02.20 |
PySide6에서 GIF 이미지를 반전시키는 방법 (0) | 2025.02.19 |
PySide6를 사용하여 MDI 인터페이스에서 수식 표현하기 (0) | 2025.02.19 |
PySide6에서 sizeHint()와 resizeEvent의 크기 차이 이해하기 (0) | 2025.02.19 |