GUI学习之十八——QDateTimeEdit学习总结
在前面两章我们总结了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学习总结的更多相关文章
- 达拉草201771010105《面向对象程序设计(java)》第十八周学习总结
达拉草201771010105<面向对象程序设计(java)>第十八周学习总结 实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构 ...
- python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
- 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除
目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...
- 201771010126 王燕《面向对象程序设计(java)》第十八周学习总结
实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...
- 马昕璐 201771010118《面向对象程序设计(java)》第十八周学习总结
实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...
- 刘志梅 201771010115 《面向对象程序设计(java)》 第十八周学习总结
实验十八 总复习 实验时间 2018-12-30 1.实验理论知识 (1)第一个关键词:public称为访问修饰符,用于控制程序的其他部分对代码的访问级别. 第二个关键词:class表明java程序中 ...
- 王艳 201771010127《面向对象程序设计(java)》第十八周学习总结
实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...
- 201771010135 杨蓉庆《面对对象程序设计(java)》第十八周学习总结
1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: ...
- (C/C++学习笔记) 十八. 继承和多态
十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...
随机推荐
- 移动Anaconda安装目录后导致图标变白以及Anaconda Navigator,Anaconda Prompt,jupyter notebook和spyder启动不了的解决方法
Q:因为移动了Anaconda3的安装目录,所以Anaconda3的相应应用程序启动不了,包括图标也会变白 解决方法:修改对应快捷键的属性,有对应的启动位置,修改下位置路径配置以及图标(Anacond ...
- python编译报错
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 in position 3:ordi 因为同时安装了python2和python3,所 ...
- CentOS7_装机软件推荐
目录 目录 前言 CentOS7中文支持 Install Yum Fastest Mirror Plugin Install Flash Player Install NTFS-3G Install ...
- MYSQL常见安装错误集:[ERROR] --initialize specified but the data directory has files in it. Abort
1.[ERROR] --initialize specified but the data directory has files in it. Abort [错误] -初始化指定,但数据目录中有文件 ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_7 Mybatis中使用代理Dao的执行过程分析
另外一种情况,不写Mybits的dao实现类的情况. 切换工程到CRUD的工程.这里面是不写dao实现类的方式 进入到GetMaper里面.这里是创建代理对象 去找SqlSession的实现类Defa ...
- 通过vue-router实现组件间的跳转
三.通过VueRouter来实现组件之间的跳转提供了3种方式实现跳转:①直接修改地址栏中的路由地址 <!doctype html> <html> <head> &l ...
- 通俗易懂的理解 Redux(知乎)
1. React有props和state: props意味着父级分发下来的属性[父组件的state传递给子组件 子组件使用props获取],state意味着组件内部可以自行管理的状态,并且整个Rea ...
- YARN日志聚合相关参数配置
日志聚合是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制.默认情况下,Contain ...
- Django REST framework JWT学习
1.JWT学习 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证.我们不再使用Session认证机制,而使用Json Web Token认证机制. Json web toke ...
- Python基础语法之常量与变量
一.变量的命名规则 只能以下划线,数字和字母组成,不可以是特殊字符: 不可以以数字开头: 关键字不可作为变量名: 变量名区分大小写: 要具有描述性: 二.常量 python中并没有关键字const,在 ...