본문 바로가기

프로그래밍/PyQt5 GUI

27. QClendarWidget

QCalendarWidget을 이용해서 달력을 표시할 수 있으며, 달력은 월 단위로 표시되고, 처음 실행될 때 현재의 년,월,일로 선택되어 있습니다. (QCalendarWidget 공식 문서) 참고

 

27-1 예제: ex26

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

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        cal = QCalendarWidget(self)
        cal.setGridVisible(True)
        cal.clicked[QDate].connect(self.showDate)

        self.lbl = QLabel(self)
        date = cal.selectedDate()
        self.lbl.setText(date.toString(Qt.DefaultLocaleLongDate))

        vbox = QVBoxLayout()
        vbox.addWidget(cal)
        vbox.addWidget(self.lbl)

        self.setLayout(vbox)

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

    def showDate(self, date):
        self.lbl.setText(date.toString(Qt.DefaultLocaleLongDate))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

27-2 설명

cal = QCalendarWidget(self)
cal.setGridVisible(True)
cal.clicked[QDate].connect(self.showDate)
  • QCalendarWidget의 객체(cal)를 하나 만듭니다.
  • setGridVisible() 메서드를 True로 설정하면 날짜 사이에 그리드가 표시됩니다.
  • 달력(cal) 객체의 clicked 시그널을 showDate 슬롯에 연결합니다.
self.lbl = QLabel(self)
date = cal.selectedDate()
self.lbl.setText(date.toString(Qt.DefaultLocaleLongDate))
  • 달력(cal) 객체의 selectedDate() 메서드는 현재 년,월,일,요일 날짜 정보를 얻어옵니다.
  • 현재 날짜 정보를 라벨에 해당지역표시로 표시되도록 해줍니다.
vbox = QVBoxLayout()
vbox.addWidget(cal)
vbox.addWidget(self.lbl)

수직 박스 레이아웃을 이용해서, 달력과 라벨을 수직으로 배치해줍니다.

def showDate(self, date):
    self.lbl.setText(date.toString(Qt.DefaultLocaleLongDate))

showDate 메서드에서 날짜를 클릭할 때마다 라벨 텍스트가 선택한 날짜를 해당지역표시로 표시되도록 합니다.

 

27-3 결과

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

29. QDoubleSpinBox  (0) 2021.07.27
28. QSpinBox  (0) 2021.07.26
26. QPixmap  (0) 2021.07.26
25. QTabWidget  (0) 2021.07.26
24. QGroupBox  (0) 2021.07.26