Python Qt GUI设计:QCalendar日历类和QDateTimeEdit时间类(基础篇—20)

目录

1、QCalendar日历类

2、QDateTimeEdit时间类


1、QCalendar日历类

QCalendar是一个日历控件,它提供了一个基于月份的视图,允许用户通过鼠标或键盘选择日期,默认选中的是今天的日期。也可以对日历的日期范围进行规定。














Qt Company中日历组件效果

QCalendar类中的常用方法如下表所示:

通个示例了解QCalendar日历类,示例效果如下所示: 

















示例中有日历控件和标签控件,当前选定的日期显示在标签控件中。创建QCalendarWidget组件,并设置该日历控件的最大日期和最小日期。从窗口组件中选定一个日期,会发射一个QCore.QDate信号,将此信号连接到用户定义的showDate()槽函数。通过调用selectedDate()方法检索所选定的日期,然后将日期对象转换为指定格式字符串并将其设置为标签控件内容。

实现代码如下所示:

  1. import sys
  2. from PyQt5 import QtCore
  3. from PyQt5.QtGui import *
  4. from PyQt5.QtWidgets import *
  5. from PyQt5.QtCore import QDate
  6. class CalendarExample( QWidget):
  7. def __init__(self):
  8. super(CalendarExample, self).__init__()
  9. self.initUI()
  10. def initUI(self):
  11. self.cal = QCalendarWidget(self)
  12. self.cal.setMinimumDate(QDate(1980, 1, 1))
  13. self.cal.setMaximumDate(QDate(3000, 1, 1))
  14. self.cal.setGridVisible(True)
  15. self.cal.move(20, 20)
  16. self.cal.clicked[QtCore.QDate].connect(self.showDate)
  17. self.lbl = QLabel(self)
  18. date = self.cal.selectedDate()
  19. self.lbl.setText(date.toString("yyyy-MM-dd dddd"))
  20. self.lbl.move(20, 300)
  21. self.setGeometry(100,100,400,350)
  22. self.setWindowTitle('Calendar 例子')
  23. def showDate(self, date):
  24. self.lbl.setText(date.toString("yyyy-MM-dd dddd") )
  25. if __name__ == '__main__':
  26. app = QApplication(sys.argv)
  27. demo = CalendarExample()
  28. demo.show()
  29. sys.exit(app.exec_())

2、QDateTimeEdit时间类

QDateTimeEdit是一个允许用户编辑日期时间的控件,可以使用键盘和上、下箭头按钮来增加或减少日期时间值。





Qt Company中时间组件效果

QDateTimeEdit类中的常用方法如下表所示:

QDateTimeEdit类中的常用信号如下表所示:

QDateTimeEdit类中包含QDateEdit类和QTimeEdit类,QDateEdit类用来编辑控件的日期,仅包括年、月和日;QTimeEdit用来编辑控件的时间,仅包括小时、分钟和秒。

不要用QDateEdit类来设置或获取时间,也不要用QTimeEdit类来设置或获取日期。如果要同时操作日期时间,请使用QDateTimeEdit类。

设置弹出日历时要注意:用来弹出日历的类只有QDateTimeEdit类和QDateEdit类,而QTimeEdit类虽然在语法上可以设置弹出日历,但不起作用。

在默认情况下,如果QDateTimeEdit类构造时不指定日期时间,那么系统会为其设置一个和本地相同的日期时间格式,并且值为2000年1月1日0时0分0秒,也可以手动指定控件显示的日期时间。

通过示例了解QDateTimeEdit时间类,示例效果如下所示: 

在这个例子中有QDateTimeEdit控件和按钮控件,当单击“获得日期和时间"按钮时,会获得当前的日期和时间。

实现代码如下所示:

  1. import sys
  2. from PyQt5.QtGui import *
  3. from PyQt5.QtWidgets import *
  4. from PyQt5.QtCore import QDate, QDateTime , QTime
  5. class DateTimeEditDemo(QWidget):
  6. def __init__(self):
  7. super(DateTimeEditDemo, self).__init__()
  8. self.initUI()
  9. def initUI(self):
  10. self.setWindowTitle('QDateTimeEdit例子')
  11. self.resize(300, 90)
  12. vlayout = QVBoxLayout()
  13. self.dateEdit = QDateTimeEdit(QDateTime.currentDateTime(), self)
  14. self.dateEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
  15. # 设置最小日期
  16. self.dateEdit.setMinimumDate(QDate.currentDate().addDays(-365))
  17. # 设置最大日期
  18. self.dateEdit.setMaximumDate(QDate.currentDate().addDays(365))
  19. self.dateEdit.setCalendarPopup( True)
  20. self.dateEdit.dateChanged.connect(self.onDateChanged)
  21. self.dateEdit.dateTimeChanged.connect(self.onDateTimeChanged)
  22. self.dateEdit.timeChanged.connect(self.onTimeChanged)
  23. self.btn = QPushButton('获得日期和时间')
  24. self.btn.clicked.connect(self.onButtonClick)
  25. vlayout.addWidget( self.dateEdit )
  26. vlayout.addWidget( self.btn )
  27. self.setLayout(vlayout)
  28. # 日期发生改变时执行
  29. def onDateChanged(self , date):
  30. print(date)
  31. # 无论日期还是时间发生改变,都会执行
  32. def onDateTimeChanged(self , dateTime ):
  33. print(dateTime)
  34. # 时间发生改变时执行
  35. def onTimeChanged(self , time):
  36. print(time)
  37. def onButtonClick(self ):
  38. dateTime = self.dateEdit.dateTime()
  39. # 最大日期
  40. maxDate = self.dateEdit.maximumDate()
  41. # 最大日期时间
  42. maxDateTime = self.dateEdit.maximumDateTime()
  43. # 最大时间
  44. maxTime = self.dateEdit.maximumTime()
  45. # 最小日期
  46. minDate = self.dateEdit.minimumDate()
  47. # 最小日期时间
  48. minDateTime = self.dateEdit.minimumDateTime()
  49. # 最小时间
  50. minTime = self.dateEdit.minimumTime()
  51. print('\n选择日期时间' )
  52. print('dateTime=%s' % str(dateTime) )
  53. print('maxDate=%s' % str(maxDate) )
  54. print('maxDateTime=%s' % str(maxDateTime) )
  55. print('maxTime=%s' % str(maxTime) )
  56. print('minDate=%s' % str(minDate) )
  57. print('minDateTime=%s' % str(minDateTime) )
  58. print('minTime=%s' % str(minTime) )
  59. if __name__ == '__main__':
  60. app = QApplication(sys.argv)
  61. demo = DateTimeEditDemo()
  62. demo.show()
  63. sys.exit(app.exec_())

关注公众号,发送关键字:Java车牌识别,获取项目源码。