본문 바로가기
프로그래밍/python

PyQt5 QCalendarWidget 사용법 및 속성

by 마루의 일상 2024. 5. 30.
728x90
반응형

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QCalendarWidget, QLabel, QVBoxLayout, QWidget
from PyQt5.QtCore import QDate, Qt
from PyQt5.QtGui import QTextCharFormat

class CalendarExample(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QCalendarWidget Example")
        self.setGeometry(100, 100, 400, 300)

        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)

        self.layout = QVBoxLayout()
        self.central_widget.setLayout(self.layout)

        self.calendar = QCalendarWidget(self)
        self.calendar.setGridVisible(True)
        self.calendar.setNavigationBarVisible(True)
        self.calendar.setFirstDayOfWeek(Qt.Monday)
        self.calendar.setSelectionMode(QCalendarWidget.SingleSelection)
        self.calendar.setMinimumDate(QDate(2000, 1, 1))
        self.calendar.setMaximumDate(QDate(2100, 12, 31))
        self.calendar.setHorizontalHeaderFormat(QCalendarWidget.SingleLetterDayNames)
        self.calendar.setVerticalHeaderFormat(QCalendarWidget.ISOWeekNumbers)
        
        self.calendar.clicked.connect(self.on_date_clicked)
        self.layout.addWidget(self.calendar)

        self.label = QLabel("Selected Date: None", self)
        self.layout.addWidget(self.label)

        # 특정 날짜 강조
        self.highlight_date(QDate(2023, 12, 25), Qt.red)

        self.show()

    def on_date_clicked(self, date):
        self.label.setText(f"Selected Date: {date.toString()}")

    def highlight_date(self, date, color):
        format = QTextCharFormat()
        format.setForeground(color)
        self.calendar.setDateTextFormat(date, format)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = CalendarExample()
    sys.exit(app.exec_())

 

이 예제는 다음과 같은 기능을 포함합니다:

  1. 기본 창 설정:
    • QMainWindow를 기반으로 창을 설정하고 기본 레이아웃을 구성합니다.
  2. QCalendarWidget 설정:
    • QCalendarWidget을 생성하고 다양한 속성을 설정합니다:
      • 그리드 보이기: setGridVisible(True)
      • 네비게이션 바 보이기: setNavigationBarVisible(True)
      • 첫 번째 요일 설정: setFirstDayOfWeek(Qt.Monday)
      • 선택 모드 설정: setSelectionMode(QCalendarWidget.SingleSelection)
      • 선택할 수 있는 날짜의 범위 설정: setMinimumDate(QDate(2000, 1, 1)), setMaximumDate(QDate(2100, 12, 31))
      • 헤더 형식 설정: setHorizontalHeaderFormat(QCalendarWidget.SingleLetterDayNames), setVerticalHeaderFormat(QCalendarWidget.ISOWeekNumbers)
  3. 시그널 연결:
    • 날짜가 클릭되었을 때 실행되는 on_date_clicked 메서드를 연결합니다.
  4. 라벨 추가:
    • 선택된 날짜를 표시할 QLabel을 추가합니다.
  5. 특정 날짜 강조:
    • highlight_date 메서드를 사용하여 특정 날짜를 강조합니다. 예제에서는 크리스마스를 빨간색으로 강조합니다.

이 통합 예제를 실행하면, 다양한 QCalendarWidget 기능을 한눈에 확인할 수 있으며, 이를 바탕으로 자신만의 커스터마이즈된 달력 위젯을 개발할 수 있을 것입니다.

 

728x90
반응형

'프로그래밍 > python' 카테고리의 다른 글

PyQt5 QDateEdit 위젯 사용법  (0) 2024.06.02
PyQt5 QSpinBox 사용 방법 가이드  (0) 2024.06.02
PyQt5 QPixmap 사용법과 관련 속성  (0) 2024.05.29
PyQt5 QTabWidget 사용법 가이드  (0) 2024.05.28
PyQt5 QGroupBox 사용법  (0) 2024.05.27