1. 코드

from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QVBoxLayout, QCalendarWidget,QPushButton
from PyQt5.QtCore import Qt, QDate
import sys

class 달력위젯(QWidget):

    def __init__(self):
        super().__init__()
        self.UI초기화()

    def UI초기화(self):
        self.cal = QCalendarWidget() 
        self.cal.setGridVisible(True) 
        self.cal.setDateRange(QDate(2020, 1, 1), QDate.currentDate()) 
        self.cal.clicked[QDate].connect(self.PastDate)  

        self.label1 = QLabel(self)
        self.date = self.cal.selectedDate() 
        self.label1.setText(self.date.toString())  

        self.label2 = QLabel(self) 
        previousBtn = QPushButton('이전 달')
        previousBtn.clicked.connect(self.preMonth)
        nextBtn = QPushButton('다음 달')
        nextBtn.clicked.connect(self.nextMonth)

        vbox = QVBoxLayout()
        vbox.addWidget(self.cal)
        vbox.addWidget(self.label1)
        vbox.addWidget(self.label2)
        vbox.addWidget(previousBtn)
        vbox.addWidget(nextBtn)

        self.setLayout(vbox)

        self.setWindowTitle('QCalendarWidget')
        self.setGeometry(300, 300, 500, 400)
        self.show()

    def PastDate(self, date):  
        self.label1.setText(date.toString()) 
        self.label2.setText(f'2020년 1월 1일부터 {QDate(2020,1,1).daysTo(date)}일이 지났습니다.') 

    def preMonth(self):
        self.cal.showPreviousMonth()

    def nextMonth(self):
        self.cal.showNextMonth()    

프로그램무한반복 = QApplication(sys.argv)
실행인스턴스 = 달력위젯()
프로그램무한반복.exec_()

2. 상세 내용

QCalendarWidget은 달력을 표시할 수 있는 위젯입니다. 이를 통해 날짜별 다양한 연산을 수행할 수 있습니다. 공식문서, Slots, Signals를 함께 개시합니다.

QCalendarWidget - Qt for Python

출처 : https://doc.qt.io/qtforpython/PySide2/QtWidgets/QCalendarWidget.html

출처 : https://doc.qt.io/qtforpython/PySide2/QtWidgets/QCalendarWidget.html

self.cal = QCalendarWidget()
self.cal.setGridVisible(True)
self.cal.setDateRange(QDate(2020, 1, 1), QDate.currentDate())
self.cal.clicked[QDate].connect(self.PastDate)
def PastDate(self, date):
    self.label1.setText(date.toString())
    self.label2.setText(f'2020년 1월 1일부터 {QDate(2020,1,1).daysTo(date)}일이 지났습니다.') 
self.label1 = QLabel(self)
self.date = self.cal.selectedDate()
self.label1.setText(self.date.toString())

self.label2 = QLabel(self)
previousBtn = QPushButton('이전 달')
previousBtn.clicked.connect(self.preMonth)
nextBtn = QPushButton('다음 달')
nextBtn.clicked.connect(self.nextMonth)
def preMonth(self):
    self.cal.showPreviousMonth()

def nextMonth(self):
    self.cal.showNextMonth()