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

一.描述

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

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

二.QDateTime的使用

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

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

  1. 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

  1. date_time = QDateTime(2019,5,26,15,25)
  2. date_time.addYears() #增加年
  3. date_time.addMonths() #增加月
  4. date_time.addDays() #增加日
  5. date_time.addSecs() #增加秒
  6. date_time.addMSecs() #增加毫秒
  7. date_time.setDate()
  8. date_time.setTime()

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

  1. date_time = date_time.addYears(3)

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

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

  计算时间差

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

  获取时间

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

  计时功能

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

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

  1. from PyQt5.Qt import *
  2. import sys
  3. class Window(QWidget):
  4. def __init__(self):
  5. super().__init__()
  6. self.UI_SetUp()
  7.  
  8. def UI_SetUp(self):
  9. time = QTime.currentTime()
  10. time.start()
  11. self.btn_start = QPushButton('计时开始',self)
  12. self.btn_start.move(100,200)
  13. self.btn_restart = QPushButton('重新开始计时',self)
  14. self.btn_restart.move(100,250)
  15. self.btn_time = QPushButton('计时',self)
  16. self.btn_time.move(100,300)
  17. self.btn_time.setEnabled(False)
  18. self.label = QLabel(self)
  19. self.label.move(200,200)
  20. self.btn_start.clicked.connect(self.start)
  21. self.btn_time.clicked.connect(self.get_time)
  22. self.btn_restart.clicked.connect(self.restart)
  23. pass
  24. def start(self):
  25. self.time = QTime.currentTime()
  26. self.time.start()
  27. # self.label.setText('计时开始')
  28. self.label.adjustSize()
  29. self.btn_time.setEnabled(True)
  30. def get_time(self):
  31. # print(self.time.elapsed())
  32. data = self.label.text()
  33. print(data)
  34. self.label.setText(data +'\n'+ str(self.time.elapsed()))
  35. self.label.adjustSize()
  36. def restart(self):
  37. del self.time
  38. self.label.setText('')
  39. self.btn_time.setEnabled(False)
  40.  
  41. if __name__ =='__main__':
  42. app = QApplication(sys.argv)
  43. window = Window()
  44. window.show()
  45. sys.exit(app.exec_())

秒表

三.QDateTimeEdit的应用

  1.构造函数

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

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

  2.显示格式

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

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

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

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

还有日期的格式符

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

就可以直接使用了

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

出来的就是这样的效果

  3.section操作

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

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

当前section枚举值QDateTimeEdit.Section

有几点应该注意一下:

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

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

  4.范围操作

  1. QDateTimeEdit.setMaximumDateTime(QDateTime)
  2. QDateTimeEdit.setMinimumDateTime(QDateTime)
  3. QDateTimeEdit.setDateTimeRange(mini_datetime,max_datetime)
  4. QDateTimeEdit.maximumDateTime()
  5. QDateTimeEdit.minimumDateTime()

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

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

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

  1. QDateTimeEdit.clearMaximumDateTime()
  2. QDateTimeEdit.clearMinimumDateTime()

  5.日历选择控件

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

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

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

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

  1. dte.setCalendarWidget(QCalendarWidget)

  6.获取时间

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

  1. QDateTimeEdit.dateTime()
  2. QDateTimeEdit.date()
  3. QDateTimeEdit.time()

四.信号

日期发生改变

  1. QDateTimeEdit.dateTimeChanged() #日期时间发生改变
  2. QDateTimeEdit.dateChanged() #日期发生改变
  3. 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. 7、Shiro加密和加盐

    这里我们以md5加密方法举例,首先我们写一个main方法测试我们的密码经过md5加密之后的得到什么样的字符串: /** * 书写方法测试Md5Hash将密码“houru”加密之后的密文 * 但是仅仅加 ...

  2. 二:flask-debug模式详解

    debug模式的情况下可以抛出详细异常信息 新建一个脚本并运行 访问 此时是非debug模式,如果运行的时候代码报错了,是不会提示详细错误的,只会报服务器内部错误 开启debug模式,可以查看到详细错 ...

  3. java jna 调用windows动态链接库

    import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; import com.sun.j ...

  4. Scala类和对象

    1.面向对象 Scala的类与java.C++的一些比起来更简洁,速度更快 对象:使用object关键字修饰的 类:使用class关键字修饰的new Person()实例对象 new类:类的实例(对象 ...

  5. Pycharm激活方法(license server方法)

    pycharm所有版本 http://www.jetbrains.com/pycharm/download/previous.html 打开激活窗口 选择 Activate new license w ...

  6. LeetCode.876-链表的中间节点(Middle of the Linked List)

    这是悦乐书的第337次更新,第361篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第206题(顺位题号是876).给定具有头节点的非空单链表,返回链表的中间节点.如果有两 ...

  7. 【Qt开发】V4L2 API详解 Camera详细设置

    Camera的可设置项极多,V4L2 支持了不少.但Sam之前对这些设置的用法和涵义都是在看videodev2.h中边看边理解,感觉非常生涩.直到写这篇blog时,才发现v4l2有专门的SPEC来说明 ...

  8. 【Qt开发】【Linux开发】QT设置环境变量QWS_DISPLAY

    QT设置环境变量QWS_DISPLAY 当应用程序./myQtApp -qws启动时,会去检测QWS_DISPLAY这个环境变量, 判断界面最终显示在哪个framebuffer中, 如果是虚拟的fra ...

  9. Centos 安装Jenkins的坎坷

    安装Jenkins(简单复制即可) wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.rep ...

  10. ipad已停用 连接itunes怎么办

    问题描述: ipad 开机密码多次输入出错后,提示 ipad已停用 连接itunes 解决方法: 参考: https://jingyan.baidu.com/article/fb48e8bee9ef4 ...