下面是PyQt5 日期编辑控件QDateEdit的完整使用攻略。
概述
QDateEdit是Python PyQt5框架中的日期编辑控件,可以用来选择日期。它继承了QDateTimeEdit类,支持以下功能:
- 支持只选择日期或时间;
- 支持各种日期格式;
- 支持手动输入日期;
- 可以设置日期的最大值和最小值。
基本用法
QDateEdit是基于QDateTimeEdit实现的,在默认情况下,既可以设置日期,也可以设置时间。如果只需要设置日期,可以将时间隐藏掉。
from PyQt5.QtWidgets import QApplication, QWidget, QDateEdit, QVBoxLayout
from PyQt5.QtCore import QDate
import sys
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建QDateEdit对象
de = QDateEdit(self)
# 设置日期
de.setDate(QDate.currentDate())
# 隐藏时间
de.setDisplayFormat('yyyy/MM/dd')
de.setCalendarPopup(True)
# 布局
vbox = QVBoxLayout()
vbox.addWidget(de)
self.setLayout(vbox)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
运行上面的代码,可以弹出一个窗口,其中包含了日期编辑控件。默认情况下,控件中显示的是当前的日期。setDisplayFormat方法用于设置日期格式(yyyy 表示年份,MM 表示月份,dd 表示日期)。setCalendarPopup方法允许选择日期。
设置日期最大值和最小值
可以通过setMaximumDate和setMinimumDate方法设置日期的最大值和最小值。
from PyQt5.QtWidgets import QApplication, QWidget, QDateEdit, QVBoxLayout
from PyQt5.QtCore import QDate
import sys
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建QDateEdit对象
de = QDateEdit(self)
# 设置日期
de.setDate(QDate.currentDate())
# 设置最大日期
de.setMaximumDate(QDate.currentDate().addDays(4))
# 设置最小日期
de.setMinimumDate(QDate.currentDate().addDays(-4))
# 隐藏时间
de.setDisplayFormat('yyyy/MM/dd')
de.setCalendarPopup(True)
# 布局
vbox = QVBoxLayout()
vbox.addWidget(de)
self.setLayout(vbox)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
运行上面的代码,可以看到选择日期的范围被限制在了当前日期的前后4天之内。
示例说明
示例1:使用QDateEdit控件创建生日提醒应用程序
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QDateEdit, QVBoxLayout
from PyQt5.QtCore import QDate
import sys
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建QDateEdit对象
de = QDateEdit(self)
# 设置日期
de.setDate(QDate.currentDate())
# 隐藏时间
de.setDisplayFormat('yyyy/MM/dd')
de.setCalendarPopup(True)
# 显示生日提醒
birthday = QLabel(self)
birthday.setText('在此处显示生日提醒')
birthday.setAlignment(0x84) # 居中对齐
# QDateEdit值变化时更新生日提醒
def update_birthday():
birthday_date = de.date()
today = QDate.currentDate()
if today.month() == birthday_date.month() and today.day() == birthday_date.day():
birthday.setText('生日快乐!')
elif today.daysTo(birthday_date) > 0:
birthday.setText('还有{}天到生日'.format(today.daysTo(birthday_date)))
else:
birthday.setText('已经过了{}天'.format(-today.daysTo(birthday_date)))
de.dateChanged.connect(update_birthday)
# 布局
vbox = QVBoxLayout()
vbox.addWidget(de)
vbox.addWidget(birthday)
self.setLayout(vbox)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
运行上面的代码,可以看到一个日期编辑控件以及一个生日提醒文本。当选择的日期是当前日期的生日时,会显示“生日快乐!”,否则会显示距离生日的天数。
示例2:使用多个QDateEdit控件创建日期区间选择应用程序
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QDateEdit, QHBoxLayout, QVBoxLayout
from PyQt5.QtCore import QDate
import sys
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建两个QDateEdit对象
start_date = QDateEdit(self)
start_date.setDisplayFormat('yyyy/MM/dd')
start_date.setCalendarPopup(True)
end_date = QDateEdit(self)
end_date.setDisplayFormat('yyyy/MM/dd')
end_date.setCalendarPopup(True)
# 显示日期区间
date_range = QLabel(self)
date_range.setText('在此处显示日期区间')
date_range.setAlignment(0x84) # 居中对齐
# QDateEdit值变化时更新日期区间
def update_date_range():
start = start_date.date()
end = end_date.date()
date_range.setText('{} 至 {}'.format(start.toString('yyyy/MM/dd'), end.toString('yyyy/MM/dd')))
start_date.dateChanged.connect(update_date_range)
end_date.dateChanged.connect(update_date_range)
# 布局
hbox = QHBoxLayout()
hbox.addWidget(start_date)
hbox.addWidget(end_date)
vbox = QVBoxLayout()
vbox.addLayout(hbox)
vbox.addWidget(date_range)
self.setLayout(vbox)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
运行上面的代码,可以看到两个日期编辑控件以及一个日期区间文本。当选择的日期区间变化时,会更新日期区间文本。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 日期编辑控件QDateEdit - Python技术站