• PyQt5快速开发与实战 4.12 日历与时间


    PyQt5快速开发与实战

    4. 第4章 PyQt5 基本窗口控件

    4.12 日历与时间

    4.12.1 QCalendar

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

    QCalendar类中的常用方法

    方法描述
    setDataRange()设置日期范围供选择
    setFirstDayOfWeek()重新设置星期的第一天,默认是星期日。其参数枚举值如下:Qt.Monday,星期一;Qt.Tuesday,星期二;Qt.Wednesday,星期三;Qt.Thursday,星期四;Qt.Friday,星期五;Qt.Saturday,星期六;Qt.Sunday,星期日
    setMinimumDate()设置最小日期
    setMaximumDate()设置最大日期
    setSelectedDate()设置一个QDate对象,作为日期控件所选定的日期
    maximumDate获得日历控件的最大日期
    minimumDate获得日历控件的最小日期
    selectedDate()返回当前选定的日期
    setGridvisible()设置日历控件是否显示网格

    案例——QCalendar的使用

    import sys
    from PyQt5 import QtCore
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import QDate
    
    class CalendarExample(QWidget):
        def __init__(self):
            super(CalendarExample, self).__init__()
            self.initUI()
    
        def initUI(self):
            self.cal = QCalendarWidget(self)
            self.cal.setMinimumDate(QDate(1980 , 1, 1))
            self.cal.setMaximumDate(QDate(3000 , 1, 1,))
            self.cal.setGridVisible(True)
            self.cal.move(20 , 20)
            self.cal.clicked[QtCore.QDate].connect(self.showDate)
            self.lb1 = QLabel(self)
            date = self.cal.selectedDate()
            self.lb1.setText(date.toString("yyyy-MM-dd dddd"))
            self.lb1.move(20 , 300)
            self.setGeometry(100 , 100 , 400 , 350)
            self.setWindowTitle("Calendar案例")
    
        def showDate(self,date):
            self.lb1.setText(date.toString("yyyy-MM-dd dddd"))
    
    if __name__ == '__main__':
        from pyqt5_plugins.examples.exampleqmlitem import QtCore
        QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
        app = QApplication(sys.argv)
        win = CalendarExample()
        win.show()
        sys.exit(app.exec_())
    
    • 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

    在这里插入图片描述

    4.12.2 QDateTimeEdit

    QDateTimeEdit是一个允许用户编辑日期时间的控件,可以使用键盘和上、下箭头按钮来增加或减少日期时间值。比如,当使用鼠标选中QDateTimeEdit中的年份时,可以使用键盘上的上、下键来改变数值。

    ODateTimeEdit通过setDisplavFormat()函数来设置显示的日期时间格式。

    QDateTimeEdit类中的常用方法。

    方法描述
    setDisplayFormat()设置日期时间格式: yyyy,代表年份,用4位数表示;MM,代表月份,取值范围为01~12; dd,代表日,取值范围为0131;HH,代表小时,取值范围为00-23; mm,代表分钟,取值范围为0059;ss,代表秒,取值范围为0059;
    setMinimumDate()设置控件的最小日期
    setMaximumDate()设置控件的最大日期
    time()返回编辑的时间
    date()返回编辑的日期

    QDateTimeEdit类中的常用信号

    信号含义
    dateChanged当日期改变时发射此信号
    dateTimeChanged当日期时间改变时发射此信号
    timeChanged当时间改变时发射此信号
    • QDateTimeEdit的子类

      QDateEdit和 QTimeEdit类均继承自QDateTimeEdit类,它们的许多特性和功能都由QDateTimeEdit类提供。

      QWidget → QAbstractSpinBox → QDateTimeEdit → QDateEdit → QTimeEdit

      设置显示格式时要注意:QDateEdit用来编辑控件的日期,仅包括年、月和日;QTimeEdit用来编辑控件的时间,仅包括小时、分钟和秒。

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

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

    • 初始化QDateTimeEdit类

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

      除了通过构造函数指定所显示的日期时间外,也可以根据QDateTimeEdit提供的槽函数来设置,比如setDate Time()、setDate()、setTime()函数。

    • 设置日期时间格式

      如果不想使用系统默认的格式,则可以通过setDisplayFormat()来自定义日期时间格式。

    • 设置日期时间范围

      dateEdit = QDateTimeEdit (QDateTime.currentDateTime (),self)
      dateEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
      #设置最小日期
      dateEdit.setMinimumDate (QDate.currentDate().addDays (-365))
      #设置最大日期
      dateEdit.setMaximumDate (QDate.currentDate().addDays (365))
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 弹出日历

      在默认情况下,只能通过上下箭头来改变日期时间。如果要弹出日历控件,只需调用setCalendarPopup(True)即可。

    • 获取日期时间

      可以通过 date()、 dateTime()等方法来获取日期时间对象,如果要获取年、月、日等信息,则可以调用QDate的year()、month()、day()等函数。

    • 信号与槽函数

    QDateTimeEdit控件常用的信号是dateChanged 、 dateTimeChanged 和·timeChanged,分别在改变日期、日期时间、时间时发射。

    QDateTimeEdit的使用案例

    import sys
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import QDate, QDateTime, QTime
    
    
    class DateTimeEditDemo(QWidget):
        def __init__(self):
            super(DateTimeEditDemo, self).__init__()
            self.initUI()
    
        def initUI(self):
            self.setWindowTitle('QDateTimeEdit例子')
            self.resize(300, 90)
    
            vlayout = QVBoxLayout()
            self.dateEdit = QDateTimeEdit(QDateTime.currentDateTime(), self)
            self.dateEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
            # 设置最小日期
            self.dateEdit.setMinimumDate(QDate.currentDate().addDays(-365))
            # 设置最大日期
            self.dateEdit.setMaximumDate(QDate.currentDate().addDays(365))
            self.dateEdit.setCalendarPopup(True)
    
            self.dateEdit.dateChanged.connect(self.onDateChanged)
            self.dateEdit.dateTimeChanged.connect(self.onDateTimeChanged)
            self.dateEdit.timeChanged.connect(self.onTimeChanged)
    
            self.btn = QPushButton('获得日期和时间')
            self.btn.clicked.connect(self.onButtonClick)
    
            vlayout.addWidget(self.dateEdit)
            vlayout.addWidget(self.btn)
            self.setLayout(vlayout)
    
        # 日期发生改变时执行
        def onDateChanged(self, date):
            print(date)
    
        # 无论日期还是时间发生改变,都会执行
        def onDateTimeChanged(self, dateTime):
            print(dateTime)
    
        # 时间发生改变时执行
        def onTimeChanged(self, time):
            print(time)
    
        def onButtonClick(self):
            dateTime = self.dateEdit.dateTime()
            # 最大日期
            maxDate = self.dateEdit.maximumDate()
            # 最大日期时间
            maxDateTime = self.dateEdit.maximumDateTime()
            # 最大时间
            maxTime = self.dateEdit.maximumTime()
            # 最小日期
            minDate = self.dateEdit.minimumDate()
            # 最小日期时间
            minDateTime = self.dateEdit.minimumDateTime()
            # 最小时间
            minTime = self.dateEdit.minimumTime()
    
            print('\n选择日期时间')
            print('dateTime=%s' % str(dateTime))
            print('maxDate=%s' % str(maxDate))
            print('maxDateTime=%s' % str(maxDateTime))
            print('maxTime=%s' % str(maxTime))
            print('minDate=%s' % str(minDate))
            print('minDateTime=%s' % str(minDateTime))
            print('minTime=%s' % str(minTime))
    
    if __name__ == '__main__':
        from pyqt5_plugins.examples.exampleqmlitem import QtCore
        QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
        app = QApplication(sys.argv)
        win = DateTimeEditDemo()
        win.show()
        sys.exit(app.exec_())
    
    • 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

    在这里插入图片描述

  • 相关阅读:
    IPSec 协议族的理解
    Python爬虫协程批量下载图片
    基于python下django框架 实现校园新生报到系统详细设计
    Azkaban (一) --------- Azkaban 概论
    7-Redis工具类
    labelimg一直闪退怎么解决啊
    如何在C程序中使用libcurl库下载网页内容
    ADAU1860调试心得(8)FASTDSP-0 通道输入
    Scala编程实战 —— 一文学会编码大数据基础案例wordcount
    后疫情时代,河北吉力宝打开传统制造业数字化转型新视角
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126027008