【PyQt】17.1-日历控件 不同风格的日期和时间、以及高级操作

日历控件puls版本

前言

1、不同风格的日期和时间展示

2、高级操作

一、日历控件中不同风格的日期和时间

QDateTimeEdit - 展示时间的框条,类似于文本输入框

1.1 代码

bash 复制代码
'''
#Author :susocool
#Creattime:2024/3/19
#FileName:40-日历控件
#Description: 日历控件的展示

'''
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class DateTimeEdit( QWidget ):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('设置不同风格的日期和时间')
        self.resize(400,100)

        dateTimeEdit1 = QDateTimeEdit()
        dateTimeEdit2 = QDateTimeEdit(QDateTime.currentDateTime())  # 获取当前时间
        dateEdit = QDateTimeEdit(QDate.currentDate())   # 获取当前日期
        timeEdit = QDateTimeEdit(QTime.currentTime())

        # 显示样式
        dateEdit.setDisplayFormat("yyyy.MM.dd") # 这里需要注意m的大小写
        timeEdit.setDisplayFormat("HH:mm:ss")
        dateTimeEdit1.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
        dateTimeEdit2.setDisplayFormat("yyyy/MM/dd HH-mm-ss")

        # 布局样式
        vlayout = QVBoxLayout()
        vlayout.addWidget(dateTimeEdit1)
        vlayout.addWidget(dateTimeEdit2)
        vlayout.addWidget(dateEdit)
        vlayout.addWidget(timeEdit)
        self.setLayout(vlayout)	# 总是忘记把布局添加上去



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = DateTimeEdit()
    ui.show()
    sys.exit(app.exec_())

1.2 注意事项

格式设置m的大小写问题

在大多数编程语言和库中,日期时间格式模式是区分大小写的。

通常,大写的 "Y" 表示年份,小写的 "y" 表示一个年份的数字;

大写的 "M" 表示月份,小写的 "m" 表示分钟;

大写的 "D" 表示月中的天数,小写的 "d" 表示一年中的某一天。

类似地,"H" 表示24小时制的小时数,"h" 表示12小时制的小时数,"S" 表示毫秒,"s" 表示秒。

切换成小写的字母就会产生错乱,因为小写的m表示分钟!!!

QTime和QDateTime的区别

1、QTime:QTime 类代表时间,它只包含小时、分钟、秒和毫秒信息,精确到毫秒级别。适合表示一天中的某个特定时间点,没有日期信息。

2、QDateTime:QDateTime 类代表日期和时间,它包含日期、小时、分钟、秒和毫秒信息,精确到毫秒级别。适合表示日期和时间,可以同时表示日期和时间的组合。

1.3 运行结果

按住Tab按键可以进行切换。然后修改,当然你也可以手动切换。

可以看出,前面一个是随机的产生一段日期时间,后面是获取当前时间并且按照我们设定的样式进行展示。

二、高级操作

2.1 成倍调整

当前日期后退or前进一整年

bash 复制代码
dateTimeEdit1.setMinimumDate(QDate.currentDate().addDays(-365))     # 往前翻一整年
dateTimeEdit1.setMaximumDate(QDate.currentDate().addDays(365))      # 往后翻一整年


2.2 下拉出日历

dateTimeEdit2.setCalendarPopup(True)

2.3 事件函数

事件有3:日期变化、时间变化、日期时间变化。

博文末尾补上完整代码

其改变引发打印结果的改变(槽函数)

2.4 获取设置的日期和时间

注意函数写一半,突然想设置全局变量时的方法。

结合完整代码食用,效果更佳。

bash 复制代码
    def onButtonClick(self):
        datetime = self.dateTimeEdit.dateTime()
        print(datetime)
        # 获取最大最小日期和时间
        print(self.dateTimeEdit.maximumDateTime())
        print(self.dateTimeEdit.minimumDateTime())
        # 获取最大最小日期
        print(self.dateTimeEdit.maximumDate())
        print(self.dateTimeEdit.minimumDate())

完整代码

bash 复制代码
'''
#Author :susocool
#Creattime:2024/3/19
#FileName:40-日历控件
#Description: 日历控件的展示

'''
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class DateTimeEdit( QWidget ):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('设置不同风格的日期和时间')
        self.resize(400,100)

        dateTimeEdit1 = QDateTimeEdit()
        dateTimeEdit2 = QDateTimeEdit(QDateTime.currentDateTime())  # 获取当前时间
        dateEdit = QDateTimeEdit(QDate.currentDate())   # 获取当前日期
        timeEdit = QDateTimeEdit(QTime.currentTime())

        self.button = QPushButton('获取日期和时间')
        self.dateTimeEdit = dateTimeEdit1   # 设置全局变量

        # 显示样式
        dateEdit.setDisplayFormat("yyyy.MM.dd") # 这里需要注意m的大小写
        timeEdit.setDisplayFormat("HH:mm:ss")
        dateTimeEdit1.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
        dateTimeEdit2.setDisplayFormat("yyyy/MM/dd HH-mm-ss")

        # 成倍调整
        dateTimeEdit1.setMinimumDate(QDate.currentDate().addDays(-365))     # 往前翻一整年
        dateTimeEdit1.setMaximumDate(QDate.currentDate().addDays(365))      # 往后翻一整年

        # 下拉出日历选择
        dateTimeEdit2.setCalendarPopup(True)


        # 布局样式
        vlayout = QVBoxLayout()
        vlayout.addWidget(dateTimeEdit1)
        vlayout.addWidget(dateTimeEdit2)
        vlayout.addWidget(dateEdit)
        vlayout.addWidget(timeEdit)
        vlayout.addWidget(self.button)  # 注意添加时与其他的区别
        self.setLayout(vlayout)

        # 槽函数
        dateTimeEdit1.dateChanged.connect(self.onDateChanged)
        dateTimeEdit1.timeChanged.connect(self.onDateTimeChanged)
        dateTimeEdit1.dateTimeChanged.connect(self.onDateTimeChanged)

        self.button.clicked.connect(self.onButtonClick)

    def onDateChanged(self,date):
        print(date)

    def onTimeChanged(self,time):
        print(time)

    def onDateTimeChanged(self,DateTime):
        print(DateTime)

    def onButtonClick(self):
        datetime = self.dateTimeEdit.dateTime()
        print(datetime)
        # 获取最大最小日期和时间
        print(self.dateTimeEdit.maximumDateTime())
        print(self.dateTimeEdit.minimumDateTime())
        # 获取最大最小日期
        print(self.dateTimeEdit.maximumDate())
        print(self.dateTimeEdit.minimumDate())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = DateTimeEdit()
    ui.show()
    sys.exit(app.exec_())
相关推荐
GIS 数据栈7 天前
博客摘录「 pyqt 为新建子线程传参以及子线程返回数据到主线程」2023年12月7日
笔记·python·pyqt·多线程·多线程通信
西木九10 天前
解决:WSL2可视化opencv和pyqt冲突:QObject::moveToThread
python·opencv·pyqt
充值内卷10 天前
PyQt入门指南五十一 文档与注释规范
开发语言·python·pyqt
王哈哈^_^13 天前
【数据集】【YOLO】【目标检测】树木倒塌识别数据集 9957 张,YOLO道路树木断裂识别算法实战训练教程!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
王哈哈^_^14 天前
【数据集】【YOLO】【目标检测】航拍船只识别数据集 3550 张,YOLO航拍水面船只识别算法实战训练教程!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
王哈哈^_^14 天前
【数据集】【YOLO】【目标检测】摔跤识别数据集 5097 张,YOLO行人摔倒识别算法实战训练教程!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
充值内卷14 天前
PyQt入门指南四十四 打印与预览功能的实现
开发语言·python·pyqt
王哈哈^_^14 天前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
王哈哈^_^15 天前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
苏三有春18 天前
PyQt5实战——UTF-8编码器UI页面设计以及按钮连接(五)
python·pyqt