PyQt5 QCalendarWidget 为选定的日期设置文本

  • Post category:Python

当使用 PyQt5 编写一个日历应用时,我们需要使用 QCalendarWidget 部件来显示月历和选择日期。在选定日期后,我们可能希望将所选日期的值存储到变量中,或者将其显示在文本标签中。本文将详细介绍 PyQt5 QCalendarWidget 部件为选定的日期设置文本的完整使用攻略。

基本用法

在 PyQt5 中定义和使用 QCalendarWidget 部件如下:

from PyQt5.QtWidgets import QApplication, QMainWindow, QCalendarWidget

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(100, 100, 400, 300)
        cal = QCalendarWidget(self)
        cal.setGridVisible(True)
        cal.clicked[QDate].connect(self.showDate)

    def showDate(self, date):
        print(date.toString())

在上面的代码中,我们首先启动了一个应用并创建了一个主窗口。接着,我们初始化了 UI,并使用 QCalendarWidget 创建了一个月历。我们启用了 setGridVisible() 函数,该函数可以显示日历的网格。我们还连接了日历的 clicked[QDate] 信号和槽函数 showDate()showDate() 函数输出了日期的字符串表示。

为选定日期设置文本

为选定日期设置文本需要使用 QCalendarWidgetselectionChanged() 信号和 selectedDate() 函数。在以下代码中,我们显示了所选日期的字符串表示:

from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QCalendarWidget, QVBoxLayout, QWidget
from PyQt5.QtCore import QDate

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(100, 100, 400, 300)

        self.label = QLabel(self)
        self.label.setAlignment(Qt.AlignCenter)

        cal = QCalendarWidget(self)
        cal.setGridVisible(True)
        cal.selectionChanged.connect(self.showDate)

        vbox = QVBoxLayout()
        vbox.addWidget(self.label)
        vbox.addWidget(cal)

        widget = QWidget()
        widget.setLayout(vbox)

        self.setCentralWidget(widget)

    def showDate(self):
        date = self.sender().selectedDate()
        self.label.setText(date.toString())

在上面的代码中,我们定义了 showDate() 函数,并连接了日历的 selectionChanged 信号。当这个信号发生时,我们使用 selectedDate() 函数获取选择的日期,并将其作为字符串显示在标签上。

示例说明

接下来,我们通过两个示例说明如何在 PyQt5 QCalendarWidget 中为选定的日期设置文本。

示例 1

在这个示例中,当我们选择某个日期时,该日期将被保存在变量 date 中,然后将其打印到控制台:

from PyQt5.QtWidgets import QApplication, QMainWindow, QCalendarWidget
from PyQt5.QtCore import QDate

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.date = None

    def initUI(self):
        self.setGeometry(100, 100, 400, 300)

        cal = QCalendarWidget(self)
        cal.setGridVisible(True)
        cal.clicked[QDate].connect(self.showDate)

    def showDate(self, date):
        self.date = date
        print(self.date.toString())

在上面的示例代码中,我们定义了一个名为 date 的变量,用于保存所选日期的值。showDate() 函数将所选日期作为参数传递,并将其保存在 date 变量中。然后,我们输出了日期的字符串表示。

示例 2

在这个示例中,我们将所选日期作为文本标签的标题显示:

from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QCalendarWidget, QVBoxLayout, QWidget
from PyQt5.QtCore import QDate

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(100, 100, 400, 300)

        self.label = QLabel(self)
        self.label.setAlignment(Qt.AlignCenter)

        cal = QCalendarWidget(self)
        cal.setGridVisible(True)
        cal.selectionChanged.connect(self.showDate)

        vbox = QVBoxLayout()
        vbox.addWidget(self.label)
        vbox.addWidget(cal)

        widget = QWidget()
        widget.setLayout(vbox)

        self.setCentralWidget(widget)

    def showDate(self):
        date = self.sender().selectedDate()
        self.label.setText(date.toString(Qt.DefaultLocaleShortDate))

在上面的示例代码中,当用户选择新日期时,showDate() 函数将使用 selectedDate() 函数获取所选日期,并将其作为文本标签的标题显示。 在这个示例中,日期将以默认的区域设置的短日期格式显示(例如,对于美国用户,这是 “MM/dd/yyyy”)。

以上就是关于 PyQt5 QCalendarWidget 部件为选定的日期设置文本的完整使用攻略。