- 显示所选日期
主要内容 #
完成效果 #
本节课程是万年历实现的第二节,完成本节课程,能实现显示用户在日历中鼠标所选日期。

收获 #
学习完本节内容,我们会创建标签来显示鼠标所选中的日期信息。
1.显示所选日期 #
QDate 是用于处理公历中的日历日期的类,clicked()是QCalendarWidget控件的常用信号,
当点击控件中的日期时,发射信号,并且把选中日期对应的QDate传入与之相连的槽函数。
以下就是本例代码:
from PyQt5.QtWidgets import QWidget, QCalendarWidget, QLabel, QApplication, QVBoxLayout
from PyQt5.QtCore import QDate, QDateTime, QTimer, Qt
import sys
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        vbox = QVBoxLayout(self)  # 创建一个垂直盒布局
        cal = QCalendarWidget(self)  # 创建一个日历对象
        cal.setNavigationBarVisible(True)  # 设置导航条是否可见,True为可见
        cal.setFirstDayOfWeek(Qt.Monday)  # 设置周一为每周的第一天
        cal.setGridVisible(True)  # 显示网格线
        cal.setDateRange(QDate(1949, 1, 1), QDate(2049, 1, 1))  # 设置日历涵盖的日期范围,从1949.1.1-2049.1.1
        self.lbl = QLabel(self)  # 创建一个标签
        # 选择一个日期时,clicked的点击信号就触发了,与showdate槽函数相关联并传入QDate参数。
        cal.clicked[QDate].connect(self.showDate)
        vbox.addWidget(cal)  # 将日历添加到布局中
        vbox.addWidget(self.lbl)  # 将标签添加到布局中
        self.setGeometry(300, 300, 350, 300)
        self.setWindowTitle('Calendar')
        self.show()
    def showDate(self, date):
        # toString方法把日期对象转成字符串,在标签里面按指定格式显示出来
        # yyyy/MM/dd dddd 表示按照年/月/日 星期的格式显示
        self.lbl.setText(date.toString("yyyy/MM/dd dddd"))
app = QApplication(sys.argv)  # 创建应用程序
ex = Example()  # 创建窗口对象
sys.exit(app.exec_())  # 设置关闭窗口后结束进程
拓展练习:尝试将QLabel放到日历上方。
小结 #
习题 #
- 习题1:尝试将日期显示格式改为”yyyy-MM-dd dddd”。