☘️

015 QTime, QDateEdit, QDateTimeEdit (시간,날짜 편집기)

1. 코드

from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, \ QLabel, QTimeEdit, QDateEdit, QDateTimeEdit from PyQt5.QtCore import Qt, QTime, QDate, QDateTime import sys class 시간날짜편집기(QWidget): def __init__(self): super().__init__() self.UI초기화() def UI초기화(self): label = QLabel('QTimeEdit') label.setAlignment(Qt.AlignCenter) time = QTimeEdit(self) time.setTime(QTime.currentTime()) time.setTimeRange(QTime(00, 00, 00), QTime.currentTime()) time.setDisplayFormat('a:hh:mm:ss.zzz') label2 = QLabel('QDateEdit') label2.setAlignment(Qt.AlignCenter) date_edit = QDateEdit(self) date_edit.setDate(QDate.currentDate()) date_edit.setDateRange(QDate(2000, 1, 1), QDate.currentDate()) date_edit.dateChanged.connect(self.dateChange) label3 = QLabel('이곳에 QDateEdit에서 선택된 값이 나타납니다.') label3.setAlignment(Qt.AlignCenter) label4 = QLabel('QDateTimeEdit') label4.setAlignment(Qt.AlignCenter) label5 = QLabel(self) label5.setAlignment(Qt.AlignCenter) label5.setText(f'QDateTime \n 현재 시간은 {QDateTime.currentDateTime().toString("yyyy년 MMMM d월 ap hh시 mm분 ss초.zzz")} 입니다.') dt_edit = QDateTimeEdit(self) dt_edit.setDateTimeRange(QDateTime(2020, 1, 1, 00, 00, 00),\ QDateTime(2021, 1, 1, 00, 00, 00)) dt_edit.setDisplayFormat('yyyy.MM.dd hh:mm:ss') vbox = QVBoxLayout() vbox.addWidget(label) vbox.addWidget(time) vbox.addWidget(label2) vbox.addWidget(date_edit) vbox.addWidget(label3) vbox.addWidget(label5) vbox.addWidget(dt_edit) self.setLayout(vbox) self.setWindowTitle('Q Time,Date Edit') self.setGeometry(300, 300, 400, 300) self.show() def dateChange(self): self.label3.setText(self.date_edit.date().toString('yyyy년 MMMM d일')) 프로그램무한반복 = QApplication(sys.argv) 실행인스턴스 = 시간날짜편집기() 프로그램무한반복.exec_()

2. 상세 내용

QTime, QDate, QDateTime 라이브러리는 같이 활용되는 함수(현재시간,날짜 구하기 등)입니다.

2.1 QTimeEdit

time = QTimeEdit(self) time.setTime(QTime.currentTime()) time.setTimeRange(QTime(00, 00, 00), QTime.currentTime()) time.setDisplayFormat('a:hh:mm:ss.zzz')
  • CurrentTime() : 현재 시간 값 , default = 00 시 00분 00초 000밀리초 ~ 23시 59분 59초 999초
  • setTimeRange(시작값,마지막 값) : 위와 같이 설정하면 프로그램을 실행한 시간 이후로는 선택이 불가능
  • setDisplayFormat(표현식) : 보여질 표현식 설정 a = 오후,오전 표기 , zzz= 밀리초 표기
예시)
단, QDate나 QTime과 같은 단일 날짜, 시간 만 보여줄 경우 그 형식에 맞춰 표현식을 써야함

2.2 QDateEdit

label2 = QLabel('QDateEdit') label2.setAlignment(Qt.AlignCenter) self.date_edit = QDateEdit(self) self.date_edit.setDate(QDate.currentDate()) self.date_edit.setDateRange(QDate(2000, 1, 1), QDate.currentDate()) self.date_edit.dateChanged.connect(self.dateChange) self.label3 = QLabel("이곳에 QDateEdit에서 선택된 값이 나타납니다.") self.label3.setAlignment(Qt.AlignCenter)
  • CurrentDate() : 현재 날짜를 반환
  • setDateRange(시작 날짜, 끝 날짜) : 여기서는 2000년 1월 1일 부터 현재 날짜 까지 선택 가능
  • dataChanged : 날짜가 변경되면 시그널 발생
 
def dateChange(self): self.label3.setText(self.date_edit.date().toString('yyyy년 MMMM d일'))
toString(표현식) 으로 현재 선택된 날짜를 라벨에 업데이트

2.3 QDateTimeEdit (QDateEdit + QTimeEdit)

label4 = QLabel('QDateTimeEdit') label4.setAlignment(Qt.AlignCenter) label5 = QLabel(self) label5.setAlignment(Qt.AlignCenter) label5.setText("QDateTime \n 현재 시간은 " + QDateTime.currentDateTime().toString( 'yyyy년 MMMM d월 ap hh시 mm분 ss초.zzz' + " 입니다.")) dt_edit = QDateTimeEdit(self) dt_edit.setDateTimeRange(QDateTime(2020, 1, 1, 00, 00, 00), QDateTime( 2021, 1, 1, 00, 00, 00)) dt_edit.setDisplayFormat('yyyy.MM.dd hh:mm:ss')
  • CurrentDateTime() : 현재 날짜와 시간을 반환
  • setDateTimeRange(시작값,끝값) : 위와 같은 경우 2020년 1월 1일 00시 00분 00초 부터 2021년 1월 1일 00시 00분 00 초 까지 선택가능

3. 실행 화면

notion imagenotion image
notion imagenotion image
단, 현재 시간을 구하는 동작은 프로그램이 실행될 때만 동작하므로 실시간으로 동기화하는 시간을 얻고자 하는 경우에는 스레드 또는 새로운 함수를 만들어 실시간으로 시간을 구할 수있습니다.