4.2.11日期时间:QDateTimeEdit
1. 日期时间及其格式
2. 弹出日历
日期时间控件允许编辑日期,它属于QDateTimeEdit类。可以通过鼠标或者键盘和上、下箭头按钮来增加或减少日期时间值。通过currentDateTime()函数来获得当前日期时间。
QDateTimeEdit 类中的常用方法如下:
setDisplayFormat():
设置日期时间格式:
yyyy,代表年份,用4位数表示
MM,代表月份,取值范围为01~12
dd,代表日,取值范围为01~31
HH,代表小时,取值范围为00~23
mm,代表分钟,取值范围为00~59
ss,代表秒,取值范围为00~59
setMinimumDate():设置控件的最小日期
setMaximumDate():设置控件的最大日期
time():返回编辑的时间
date():返回编辑的日期
setCalendarPopup():参数为True,弹出日历
QDateTimeEdit类中的常用信号如下:
dateChanged:当日期改变时发射此信号
dateTimeChanged:当日期时间改变时发射此信号
timeChanged:当时间改变时发射此信号
1. 日期时间及其格式
QDateEdit和QTimeEdit类均继承自 QDateTimeEdit 类。QDateEdit用来编辑控件的日期,仅包括年月日。QTimeEdit用来编辑控件的时间,仅包括小时、分钟和秒。 QdateTimeEdit可同时操作日期和时间。 设置显示格式:
2. 弹出日历
QDateTimeEdit 和QDateEdit对象调用 setCalendarPopup (True),即可弹出日历。如果设置了日期范围,不在范围内的日期是无法选择的。
【例4.14】 QDateTimeEdit 日期时间测试,如下:
import sys # 导入sys模块,用于处理Python解释器相关的操作,如命令行参数等。
from PyQt6.QtWidgets import * # 从PyQt6库中导入QtWidgets模块,包含所有GUI组件。
from PyQt6.QtCore import QDate, QDateTime # 从PyQt6的QtCore模块中导入QDate和QDateTime类,用于处理日期和时间。
class MyWidget(QWidget): # 定义一个名为MyWidget的类,继承自QWidget,作为主窗口。
def __init__(self): # 初始化方法,当创建MyWidget对象时自动调用。
super(MyWidget, self).__init__() # 调用父类QWidget的初始化方法。
self.initUI() # 调用自定义的initUI方法来初始化用户界面。
def initUI(self): # 初始化用户界面的方法。
self.setWindowTitle('QDateTimeEdit测试') # 设置窗口的标题为“QDateTimeEdit测试”。
self.resize(300, 100) # 设置窗口的大小为宽300像素,高100像素。
vlayout = QVBoxLayout() # 创建一个垂直布局对象vlayout。
self.dateTime = QDateTimeEdit(QDateTime.currentDateTime(),
self) # 创建一个QDateTimeEdit控件,显示当前日期和时间,并设置其父窗口为当前MyWidget对象。
self.dateTime.setDisplayFormat("yyyy-MM-dd HH:mm:ss") # 设置QDateTimeEdit控件的显示格式为“年-月-日 时:分:秒”。
# 设置最小日期
self.dateTime.setMinimumDate(QDate.currentDate().addDays(-365)) # 设置QDateTimeEdit控件可显示的最小日期为当前日期减去365天。
# 设置最大日期
self.dateTime.setMaximumDate(QDate.currentDate().addDays(365)) # 设置QDateTimeEdit控件可显示的最大日期为当前日期加上365天。
self.dateTime.setCalendarPopup(True) # 设置当点击QDateTimeEdit控件时弹出日历。
# 连接信号与槽
self.dateTime.dateChanged.connect(self.changedFunc) # 当日期改变时,调用self.changedFunc方法。
self.dateTime.dateTimeChanged.connect(self.changedFunc) # 当日期和时间都改变时,调用self.changedFunc方法。
self.dateTime.timeChanged.connect(self.changedFunc) # 当时间改变时,调用self.changedFunc方法。
self.btn = QPushButton("获得日期和时间") # 创建一个QPushButton对象,显示文本为“获得日期和时间”,并设置其父窗口为当前MyWidget对象。
self.btn.clicked.connect(self.clickedFunc) # 当按钮被点击时,调用self.clickedFunc方法。
vlayout.addWidget(self.dateTime) # 将QDateTimeEdit控件添加到垂直布局vlayout中。
vlayout.addWidget(self.btn) # 将QPushButton按钮添加到垂直布局vlayout中。
self.setLayout(vlayout) # 将MyWidget的布局设置为vlayout。
# 日期时间发生改变时执行
def changedFunc(self, dtime): # 定义一个方法,当日期或时间发生改变时调用。
print(dtime) # 打印传入的日期和时间。
# 单击按钮执行
def clickedFunc(self): # 定义一个方法,当按钮被点击时调用。
dateTime = self.dateTime.dateTime() # 获取当前QDateTimeEdit控件中的日期和时间。
maxDateTime = self.dateTime.maximumDateTime() # 获取QDateTimeEdit控件设置的最大日期和时间。
print('日期时间=%s' % str(dateTime)) # 打印获取的日期和时间。
print('最大日期时间=%s' % str(maxDateTime)) # 打印最大日期和时间。
if __name__ == '__main__': # 检查当前脚本是否作为主程序运行。
app = QApplication(sys.argv) # 创建一个QApplication对象,这是PyQt6应用程序的入口点。
w = MyWidget() # 创建一个MyWidget对象。
w.show() # 显示MyWidget窗口。
sys.exit(app.exec()) # 进入Qt应用程序的主循环,等待用户交互。当应用程序结束时,通过sys.
这段代码主要实现了一个基于PyQt6的图形用户界面(GUI)应用程序,该应用程序包含一个日期时间选择器(QDateTimeEdit)和一个按钮(QPushButton)。用户可以通过日期时间选择器选择一个日期和时间,也可以通过按钮来获取当前选择的日期和时间。
使用的布局和控件:
- 布局:
QVBoxLayout
:垂直布局,用于组织窗口中的部件,从上到下依次是日期时间选择器和按钮。
- 控件:
QWidget
:作为主窗口的基类。QDateTimeEdit
:日期时间选择器控件,允许用户选择一个日期和时间。QPushButton
:按钮控件,用户可以点击该按钮来执行某个操作。
说明:
1.创建日期时间对象,将当前日期时间作为初值,设置它的最小日期时间和最大日期时间。
2.连接日期、日期时间和时间关联的槽函数。
3.日期时间改变,命令行窗口显示日期时间对象值。
4.获得日期时间,显示最大日期时间。
关键语句:
-
self.setWindowTitle('QDateTimeEdit测试')
:设置窗口的标题为“QDateTimeEdit测试”。 -
self.dateTime = QDateTimeEdit(QDateTime.currentDateTime(), self)
:创建一个QDateTimeEdit
实例,用于显示和编辑日期和时间。初始化时显示当前日期和时间。 -
self.dateTime.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
:设置日期时间的显示格式为“年-月-日 时:分:秒”。 -
self.dateTime.setMinimumDate(QDate.currentDate().addDays(-365))
和self.dateTime.setMaximumDate(QDate.currentDate().addDays(365))
:设置日期时间选择器的最小和最大日期范围,分别为当前日期的前365天和后365天。 -
self.dateTime.setCalendarPopup(True)
:设置点击日期时间选择器时弹出日历。 -
信号与槽的连接:
self.dateTime.dateChanged.connect(self.changedFunc)
self.dateTime.dateTimeChanged.connect(self.changedFunc)
self.dateTime.timeChanged.connect(self.changedFunc)
self.btn.clicked.connect(self.clickedFunc)
这些语句将
QDateTimeEdit
的dateChanged
、dateTimeChanged
和timeChanged
信号,以及QPushButton
的clicked
信号分别连接到MyWidget
类的changedFunc
和clickedFunc
槽函数上。 -
def changedFunc(self, dtime):
和def clickedFunc(self):
:定义了两个槽函数。changedFunc
在日期时间发生改变时被调用,并打印当前的日期时间;clickedFunc
在按钮被点击时被调用,获取当前的日期时间以及日期时间选择器的最大日期时间,并打印它们。 -
self.setLayout(vlayout)
:将垂直布局vlayout
设置为窗口的布局。
总的来说,这段代码创建了一个简单的GUI窗口,包含一个日期时间选择器和一个按钮。用户可以通过选择器选择日期和时间,也可以通过按钮查看当前选择的日期时间。当日期时间发生改变时,程序会打印出当前的日期时间。