QCalendarWidget - 달력 위젯
페이지정보
내용
QCalendarWidget - 달력 위젯
Pyside2에서의 달력 위젯은 날짜를 손쉽게 선택할 수 있는 기능을 제공한다.
Qt designer로 아래와 같이 ui 파일을 구성한다.
본 강좌에서 사용할 것은 상단의 달력 위젯인 QCalendarWidget이다.
만드는 방법은 아래와 같다. datetest.ui라는 파일로 저장한다. QTimeEdit, QDateEdit, QDateTimeEdit, QComboBox 등도 미리 만들어 둔다.
QCalendarWidget에서 많이 사용하는 메서드는 아래와 같이 정리할 수 있다.
1. 현재의 날짜 받아오기
2. QCalendarWidget에 현재 날짜 설정하기
3. 원하는 년, 월로 QCalendarWidget 이동하기
1. 현재의 날짜 받아오기
1) 메서드로 날짜 추출
QCalendarWidget에서 현재의 날짜를 받아오는 메서드는 selectedDate() 이다. 따라서 아래와 같이 날짜를 받아온다.
qc = QCalendarWidget() date = qc.selectedDate() |
위는 프로그램적으로 QCalendarWidget을 생성하여 표현한 것이고, GUI 프로그램으로 표현하면 아래와 같다.
UI_set = QtUiTools.QUiLoader().load(resource_path("datetest.ui")) date = UI_set.Calendar.selectedDate() |
date에는 현재 선택된 달력의 날짜가 들어있다. 이를 그대로 출력하면 아래와 같이 나타난다.
print(date) |
PySide6.QtCore.QDate(2019, 12, 13) |
즉, date에는 QDate 형태의 날짜가 들어가 있다.
이를 년, 월, 일, 요일로 따로 뽑아내려면 아래와 같은 메서드를 사용하면 된다.
년 - int | date.year() |
월 - int | date.month() |
일 - int | date.day() |
요일 - int ( 1 ~ 7, 월 ~ 일) | date.dayOfWeek() |
각각 추출된 년, 월, 일, 요일을 "2019-12-13"과 같이 원하는 형태로 출력하면 된다.
2) QString format으로 날짜 추출
QDate 형태로 저장된 날짜를 string format으로 추출할 수 있다.
사용하는 메서드는 toString() 이다.
print(date.toString()) |
금 12 13 2019 |
toString() 메서드는 전달 인수를 QString 포맷으로 원하는 모양을 만들어 낼 수 있다.
print(date.toString("yyyy-MM-dd)) |
2019-12-13 |
toString()에 인자로 전달되는 QString의 종류는 다음과 같다.
Expression | Output |
---|---|
d | the day as number without a leading zero (1 to 31) |
dd | the day as number with a leading zero (01 to 31) |
ddd | the abbreviated localized day name (e.g. 'Mon' to 'Sun'). Uses the system locale to localize the name, i.e. QLocale::system(). |
dddd | the long localized day name (e.g. 'Monday' to 'Sunday'). Uses the system locale to localize the name, i.e. QLocale::system(). |
M | the month as number without a leading zero (1-12) |
MM | the month as number with a leading zero (01-12) |
MMM | the abbreviated localized month name (e.g. 'Jan' to 'Dec'). Uses the system locale to localize the name, i.e. QLocale::system(). |
MMMM | the long localized month name (e.g. 'January' to 'December'). Uses the system locale to localize the name, i.e. QLocale::system(). |
yy | the year as two digit number (00-99) |
yyyy | the year as four digit number |
출처 : https://doc.qt.io/archives/qt-5.13/qdatetime.html#toString
2. QCalendarWidget에 현재 날짜 설정하기
QCalendarWidget이 처음 생성되면 시스템의 날짜를 현재 날짜로 세팅한다. 이를 강제로 다른 날짜로 세팅하기 위해서는 아래의 메서드를 사용한다. 날짜를 변경하면 달력 위젯의 페이지도 설정한 년, 월로 변경된다.
setSelectedDate(QtCore.QDate(년, 월, 일) - 년, 월, 일은 int 이다.
사용방법은 아래와 같다.
print(date.toString("yyyy-MM-dd)) qc.setSelectedDate(Qtcore.QDate(2012, 7, 12) date = qc.selectedDate() print(date.toString("yyyy-MM-dd)) |
2019-12-13 2012-07-12 |
3. 원하는 년, 월로 QCalendarWidget 이동하기
setSelectedDate()를 사용하면 내부적으로 QCalendarWidget 현재의 날짜와 위젯의 페이지가 바뀐다.
하지만 QCalendarWidget의 페이지만을 변경하기 위해서는 아래의 메서드를 사용한다.
setCurrentPage(년, 월) - 년, 월은 int 이다.
사용방법은 아래와 같다.
qc.setCurrentPage(2012, 7) |
위 명령을 실행시키면, 달력 위젯의 페이지가 변경된다.
전체 코드
import sys
def setupUI(self):
UI_set = QtUiTools.QUiLoader().load(resource_path("datetest.ui"))
UI_set.BTN_check.clicked.connect(checkcalendar)
self.setCentralWidget(UI_set)
def checkcalendar(): # 현재 선택된 시간(시스템 시간)을 저장 date = UI_set.Calendar.selectedDate()
# 현재 선택된 시간을 변경, 자동으로 위젯 페이지 변경 # 변경된 시간을 다시 저장
# 달력 위젯 페이지만 변경 UI_set.Calendar.setCurrentPage(2012, 7)
# 메서드로 년, 월, 일, 요일 출력하기 UI_set.TE_result.append(str(date))
|
출처 :
QCalendarWidget - https://doc.qt.io/qtforpython/PySide6/QtWidgets/QCalendarWidget.html