实战PyQt5: 034-日期时间控件QDateTimeEdit

QDateTimeEdit简介

QDateTimeEdit是一个允许用户编辑日期时间的控件,可以使用键盘上的上下箭头按钮来增加或者减少日期时间值,在默认情况下,创建QDateTimeEdit对象时不指定日期,那么系统会为其设置一个和本地相同的日期时间格式,并且值为2000年1月1日0时0分0秒,也可以手动指定控件显示的日期和时间。

QDateTimeEdit常用方法:

  • setDisplayFormat(): 设置日期时间显示格式,(见日期时间格式);
  • setMinimumDate(): 设置控件的最小日期;
  • setMaximunDate(): 设置控件的最大日期;
  • time(): 返回编辑的时间;
  • date(): 返回编辑的日期。

日期时间格式:

  • yyyy: 表示年份,用4位数表示;
  • yy: 表示年份,用两位数表示;
  • M: 表示月份,取值范围1-12, 没有前缀0;
  • MM: 表示月份,取值范围01-12, 有前缀0;
  • MMMM:表示月份,用本地语言显示 (汉语中显示,一月、二月...);
  • d: 表示日期,取值范围1-31, 没有前缀0;
  • dd: 表示日期,取值范围01-31, 有前缀0;
  • ddd: 表示星期,局部缩写(如. 'Mon' to 'Sun');
  • dddd: 表示星期,全称方式表示(如. 'Monday' to 'Sunday');
  • hh: 表示小时,取值范围00-23;
  • mm: 表示分钟,取值范围00-59;
  • ss: 表示秒,取值范围00-59。

QDateTimeEdit常用信号:

  • dateChanged: 当日期发生改变时发射此信号,并传递出日期;
  • timeChanged: 当时间发生改变时发射此信号,并传递出时间;
  • dateTimeChanged:当日期时间发生改变时发射此信号,并传递出日期时间;
  • editingFinished: 结束编辑时发出的信号(回车,Tab,鼠标都可触发),不传递数据。

QDateTimeEdit类继承关系:

实战PyQt5: 034-日期时间控件QDateTimeEdit

测试QDateTimeEdit

创建文件qdatetimeedit.py, 测试修改时间日期信息,并用QPlainTextEdit控件来显示信息。完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QDate, QTime, QDateTime
from PyQt5.QtWidgets import (QApplication, QWidget, QDateTimeEdit,
                             QPlainTextEdit, QPushButton, QVBoxLayout)
 
class DemoDateTimeEdit(QWidget):
    def __init__(self, parent=None):
        super(DemoDateTimeEdit, self).__init__(parent)      
       
        # 设置窗口标题
        self.setWindowTitle('实战PyQt5: QDateTimeEdit Demo!')      
        # 设置窗口大小
        self.resize(400, 300)
       
        self.initUi()
       
    def initUi(self):
       
        #创建日期时间控件并设置显示格式
        self.dtEdit = QDateTimeEdit(QDateTime.currentDateTime(), self)
        self.dtEdit.setDisplayFormat('yyyy-MM-dd HH:mm:ss')
       
        #设置日期的最大与最小值,在当前日期上,前后大约偏移10年
        self.dtEdit.setMinimumDate(QDate.currentDate().addDays(-3652))
        self.dtEdit.setMaximumDate(QDate.currentDate().addDays(3652))
       
        #允许弹出日历控件
        self.dtEdit.setCalendarPopup(True)
       
        #日期改变时触发
        self.dtEdit.dateChanged.connect(self.onDateChanged)
       
        #时间改变时触发
        self.dtEdit.timeChanged.connect(self.onTimeChanged)
       
        #日期时间发生改变时触发
        self.dtEdit.dateTimeChanged.connect(self.onDateTimeChanged)
       
        #创建按钮,点击按钮,获取当前日期和时间
        self.btnDateTimeInfo = QPushButton('日期时间信息')
        self.btnDateTimeInfo.clicked.connect(self.onButtonDateTimeClicked)
       
        #创建信息显示区域
        self.textShower = QPlainTextEdit(self)
        self.textShower.setReadOnly(True)
       
        vLayout = QVBoxLayout(self)
        vLayout.setSpacing(10)
        vLayout.addWidget(self.dtEdit)
        vLayout.addWidget(self.btnDateTimeInfo)
        vLayout.addWidget(self.textShower)
       
        self.setLayout(vLayout)
       
    def onDateChanged(self, date):
        #年:月:日 [星期]
        self.showInfo(date.toString('yyyy:MM:dd [ddd]'))
   
    def onTimeChanged(self, time):
        self.showInfo(time.toString('hh:mm:ss'))
   
    def onDateTimeChanged(self, dateTime):
        self.showInfo(dateTime.toString('yyyy:MM:dd [ddd] hh:mm:ss'))
   
    def onButtonDateTimeClicked(self):
        #日期时间
        dateTime = self.dtEdit.dateTime()
        #最大日期
        maxDate = self.dtEdit.maximumDate()
        #最大日期时间
        maxDateTime = self.dtEdit.maximumDateTime()
        #最大时间
        maxTime = self.dtEdit.maximumTime()
        #最小日期
        minDate = self.dtEdit.minimumDate()
        #最小日期时间
        minDateTime = self.dtEdit.minimumDateTime()
        #最小时间
        minTime = self.dtEdit.minimumTime()
       
        self.showInfo('日期和时间信息')
        self.showInfo('日期时间为: ' + dateTime.toString('yyyy:MM:dd [ddd] hh:mm:ss'))
        self.showInfo('最小日期为: ' + minDate.toString('yyyy:MM:dd [ddd]'))
        self.showInfo('最大日期为: ' + maxDate.toString('yyyy:MM:dd [ddd]'))
        self.showInfo('最小时间为: ' + minTime.toString('hh:mm:ss'))
        self.showInfo('最大时间为: ' + maxTime.toString('hh:mm:ss'))
        self.showInfo('最小日期时间为: ' + minDateTime.toString('yyyy:MM:dd [ddd] hh:mm:ss'))
        self.showInfo('最大日期时间为: ' + maxDateTime.toString('yyyy:MM:dd [ddd] hh:mm:ss'))
   
    def showInfo(self, strInfo:str):
        #print(strInfo)
        self.textShower.appendPlainText(strInfo)
       
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoDateTimeEdit()
    window.show()
    sys.exit(app.exec())

运行结果如下图:

实战PyQt5: 034-日期时间控件QDateTimeEdit

测试QDateTimeEdit

本文知识点

  • QDateTimeEdit基本用法;
  • QDateTimeEdit弹出日历;
  • Date, Time 格式转换;
  • QPlainTextEdit显示文本信息。

前一篇: 实战PyQt5: 033-日历控件QCalendarWidget