在前面两章我们总结了QSpinBox和QDoubleSpinBox的用法,今天来总结一下QDateTimeEdit控件的基本用法

一.描述

1.QDateTimeEdit是一个用来编辑日期和时间的单行文本框,由于大继承自QAbstractSpinBox类,可以用箭头按钮来调节文本内容,也可以用键盘输入。在用按钮修改内容时可以单独修改某个部分(年、月、日、小时、分)

2.QDateTimeEdit可以用来单独显示日期(QDate),也可以单独显示时间(QTime),当然也可以显示日期时间(QDateTime)

二.QDateTime的使用

  QDateTime是用来描述日期和时间的对象,他是QDate和QTime两个类的组合,包含了年月日/小时分秒毫秒。

  构造,按照下面的方式构造对象都是可以的。

date = QDate(2019, 5, 29)
time = QTime(15, 33)
date_time = QDateTime(date)
date_time = QDateTime(date, time)
date_time = QDateTime(2019, 5, 29, 15, 33)

  日期时间的调整API

date_time = QDateTime(2019,5,26,15,25)
date_time.addYears() #增加年
date_time.addMonths() #增加月
date_time.addDays() #增加日
date_time.addSecs() #增加秒
date_time.addMSecs() #增加毫秒
date_time.setDate()
date_time.setTime()

  前面几个增加的是有返回值的,并不是把原有的date_time修改,需要对其重新赋值

date_time = date_time.addYears(3)

  函数传递的参数可以是负值,就是减少相应的值。

date_time = date_time.addYears(-3)  #减少3年

  计算时间差

QDateTime.offsetFromUtc()    #到标准时区的时间差(秒)
QDate.daysTo(QDate) #相差天数

  获取时间

date = QDate.currentDate()
time = QTime.currentTime()
date_time = QDateTime.currentDateTime()
date.day() # 这个月的第几日
date.month() # 哪个月
date.year() # 第几年
date.dayOfWeek() # 一周的第几日(星期几)
date.daysInMonth() # 所在月有多少天
date.daysInYear() # 所在年有多少天

  计时功能

time = QTime.currentTime()
time.start() #创建计时开始点
time.elapsed() #获取到开始点的时间差
time.restart() #重新设置计时点

  可以利用上面的特点做一个秒表(只有功能,不计效果)

from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.UI_SetUp() def UI_SetUp(self):
time = QTime.currentTime()
time.start()
self.btn_start = QPushButton('计时开始',self)
self.btn_start.move(100,200)
self.btn_restart = QPushButton('重新开始计时',self)
self.btn_restart.move(100,250)
self.btn_time = QPushButton('计时',self)
self.btn_time.move(100,300)
self.btn_time.setEnabled(False)
self.label = QLabel(self)
self.label.move(200,200)
self.btn_start.clicked.connect(self.start)
self.btn_time.clicked.connect(self.get_time)
self.btn_restart.clicked.connect(self.restart)
pass
def start(self):
self.time = QTime.currentTime()
self.time.start()
# self.label.setText('计时开始')
self.label.adjustSize()
self.btn_time.setEnabled(True)
def get_time(self):
# print(self.time.elapsed())
data = self.label.text()
print(data)
self.label.setText(data +'\n'+ str(self.time.elapsed()))
self.label.adjustSize()
def restart(self):
del self.time
self.label.setText('')
self.btn_time.setEnabled(False) if __name__ =='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

秒表

三.QDateTimeEdit的应用

  1.构造函数

dte = QDateTimeEdit(QDateTime.currentDateTime(),self)
dte = QDateTimeEdit(QDate.currentDate(),self)
dte = QDateTimeEdit(QTime.currentTime(),self)

  在声明的时候可以把QDateTime传递进去。

  2.显示格式

  QDateTImeEdit里每一个部分(年月日时分秒)都是一个section,我们可以根据指定的样式来改变显示格式

QDateTimeEdit.setDisplayFormat()   #指定显示格式

指定的格式有时间格式符,可以直接使用

h               #没有前导0的小时(0——12或0——23)
hh #有前导0的小时(00——12或00——23)
H #没有前导0的显示(0——23)
HH #有前导0的显示(00——23)
m #没有前导0的分钟(0——59)
mm #有前导0的分钟(00——59)
s #没有前导0的秒(0——59)
ss #有前导0的秒(00——59)
z #第二个小数部分,没有尾随0的毫秒(0——999)
zzz #第二个小数部分,有尾随0的毫秒(000——999)
AP/A #用AM/PM显示(只用一种就可以)
ap/a #用am/pm显示
t #时区

还有日期的格式符

d               #没有前导0的数字日期(1——31)
dd #有前导0的数字日期(01——31)
ddd #缩写的本地化日期名称(周日——周六,Sun——Sat)
dddd #完整的本地化日期名称(星期日——星期六)
M #没有前导0的数字月(1——12月)
MM #有前导0的数字月(01——12)
MMM #缩写的本地化月份(1月——12月)
MMMM #完整的本地化月份(一月——十二月)
yy #年的后两位
yyyy #年(4位)

就可以直接使用了

te = QDateTimeEdit(QDateTime.currentDateTime(),window)
te.setDisplayFormat('yyyy-MMMM-dddd_____AM:hh:mm:ss.zzz')

出来的就是这样的效果

  3.section操作

  section在选中的情况下可以直接编辑还可以直接用代码操作

QDateTimeEdit.sectionCount()             #获取section个数——>int
QDateTimeEdit.setCurrentSection(int) #设置当前的section
QDateTimeEdit.currentSectionIndex() #获取当前section的索引——>int
QDateTimeEdit.setCurrentSection() #设置当前操作的日期时间section
QDateTimeEdit.CurrentSection() #获取当前的section
QDateTimeEdit.sectionAt(int) #获取指定索引位置的section——QDateTimeEdit.Section
QDateTimeEdit.sectionText() #获取section的文本——>str
QNoSection = ... # type: 'QDateTimeEdit.Section'
AmPmSection = ... # type: 'QDateTimeEdit.Section'
MSecSection = ... # type: 'QDateTimeEdit.Section'
SecondSection = ... # type: 'QDateTimeEdit.Section'
MinuteSection = ... # type: 'QDateTimeEdit.Section'
HourSection = ... # type: 'QDateTimeEdit.Section'
DaySection = ... # type: 'QDateTimeEdit.Section'
MonthSection = ... # type: 'QDateTimeEdit.Section'
YearSection = ... # type: 'QDateTimeEdit.Section'
TimeSections_Mask = ... # type: 'QDateTimeEdit.Section'
DateSections_Mask = ... # type: 'QDateTimeEdit.Section'

当前section枚举值QDateTimeEdit.Section

有几点应该注意一下:

a.在设置section后,不能重新设置焦点,如果像看看是否设置成功可以用增减按钮测试。如果重新设置焦点则选中的section会重新变到默认值上。

b.要操作某个section尽量用setCurrentSection(),因为这个操作不考虑section排列的顺序,容错率较高(如果指定小时,不考虑小时在哪个位置上可以直接指定)

  4.范围操作

QDateTimeEdit.setMaximumDateTime(QDateTime)
QDateTimeEdit.setMinimumDateTime(QDateTime)
QDateTimeEdit.setDateTimeRange(mini_datetime,max_datetime)
QDateTimeEdit.maximumDateTime()
QDateTimeEdit.minimumDateTime()

在有些动态设置日期范围的可以这么做

dte = QDateTimeEdit(QDate.currentDate(),self)
dte.setDateTimeRange(QDateTime.currentDateTime().addDays(-3),QDateTime.currentDateTime().addDays(3))

这样就设定了前后3天内。还可以清空自定义的范围

QDateTimeEdit.clearMaximumDateTime()
QDateTimeEdit.clearMinimumDateTime()

  5.日历选择控件

我们上面用的日期修改用的都是键盘输入或者用鼠标点击增减按钮,还有一种方式是利用日历选择控件。

dte = QDateTimeEdit(QDate.currentDate(),self)
dte.setCalendarPopup(True)

当开启了日历选择控件,增减按钮就变成了下拉菜单的样式

点击了还会弹出个日历控件。如果觉得这个日历的样式不好看,还可以自定义一个控件

dte.setCalendarWidget(QCalendarWidget)

  6.获取时间

可以直接获取QDatetime数据,并对其进行相对应的操作

QDateTimeEdit.dateTime()
QDateTimeEdit.date()
QDateTimeEdit.time()

四.信号

日期发生改变

QDateTimeEdit.dateTimeChanged()     #日期时间发生改变
QDateTimeEdit.dateChanged() #日期发生改变
QDateTimeEdit.timeChanged() #时间发生改变

信号中都传递了相对应的QDateTime或QDate的参数。要注意的是信号发出是在数据彻底发生改变后,比如用键盘输入年份,只有当2019全输入后才会发送信号。

五.子类

  QDateTimeEdit有两个子类,用法和父类基本一致,只不过一个时描述日期的QDateEdit(),另一个是描述时间的QTimeEdit()。具体作用我们在这里就不细讲了。

GUI学习之十八——QDateTimeEdit学习总结的更多相关文章

  1. 达拉草201771010105《面向对象程序设计(java)》第十八周学习总结

    达拉草201771010105<面向对象程序设计(java)>第十八周学习总结 实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构 ...

  2. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  3. 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除

    目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...

  4. 201771010126 王燕《面向对象程序设计(java)》第十八周学习总结

    实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...

  5. 马昕璐 201771010118《面向对象程序设计(java)》第十八周学习总结

    实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...

  6. 刘志梅 201771010115 《面向对象程序设计(java)》 第十八周学习总结

    实验十八 总复习 实验时间 2018-12-30 1.实验理论知识 (1)第一个关键词:public称为访问修饰符,用于控制程序的其他部分对代码的访问级别. 第二个关键词:class表明java程序中 ...

  7. 王艳 201771010127《面向对象程序设计(java)》第十八周学习总结

    实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...

  8. 201771010135 杨蓉庆《面对对象程序设计(java)》第十八周学习总结

    1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: ...

  9. (C/C++学习笔记) 十八. 继承和多态

    十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...

随机推荐

  1. Arthas随笔

    目录 Arthas 安装Java 安装 Arthas Arthas 命令及示例 源码分析 Arthas 安装Java 下载jdk 注意 下载的JDK版本要与linux操作系统相匹配,否则汇报No su ...

  2. event.currentTarget

    https://api.jquery.com/event.currentTarget/ event.currentTargetReturns: Element Description: The cur ...

  3. Python深度学习读书笔记-5.Keras 简介

    Keras 重要特性 相同的代码可以在 CPU 或 GPU 上无缝切换运行. 具有用户友好的 API,便于快速开发深度学习模型的原型. 内置支持卷积网络(用于计算机视觉).循环网络(用于序列处理)以及 ...

  4. tensorflow 分布式搭建

    https://blog.csdn.net/qq_40652148/article/details/80467131 https://yq.aliyun.com/articles/602111 git ...

  5. 分布式任务队列 Celery —— 应用基础

    目录 目录 前文列表 前言 Celery 的周期定时任务 Celery 的同步调用 Celery 结果储存 Celery 的监控 Celery 的调试 前文列表 分布式任务队列 Celery 分布式任 ...

  6. Java中判断两个列表是否相等

    CollectionUtils.isEqualCollection(final Collection a, final Collection b) CollectionUtils工具类中有一个查看两个 ...

  7. HTML——<body> 计算机代码 【头部在“网站开发”中】

    HTML属性 完整的属性列表 在引用属性值的时候,如果某些属性本身就有双引号——name= 'John "ShotGun" Nelson' 

  8. 【HANA系列】SAP HANA数据处理的理解与分析一

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA数据处理的理解与 ...

  9. python+selenium浏览器截图

    from selenium import webdriverfrom time import sleep driver = webdriver.Firefox() # 指定和打开浏览器driver.g ...

  10. kubernetes(k8s)容器编排工具基础概念

    Kubernetes (K8s): 中文社区:https://www.kubernetes.org.cn/replication-controller-kubernetes 官网:https://ku ...