PyQt5 QDateEdit – 以编程方式设置日期

  • Post category:Python

以下是关于Python PyQt5的QDateEdit控件以编程方式设置日期的完整使用攻略。

1. 导入PyQt5模块

首先需要导入PyQt5模块。

from PyQt5.QtWidgets import QApplication, QWidget, QDateEdit
from PyQt5.QtCore import QDate

2. 创建QDateEdit控件

我们可以通过QDateEdit()函数创建一个QDateEdit控件,并指定其宽度。

dateEdit = QDateEdit(self)
dateEdit.setMinimumWidth(200)

3. 设置默认日期

使用setDate()函数可以设置QDateEdit控件的默认日期,此处我们设置为当前日期。

dateEdit.setDate(QDate.currentDate())

4. 设置日期范围

使用setMinimumDate()setMaximumDate()函数可以设置QDateEdit控件的日期范围。

dateEdit.setMinimumDate(QDate(2000, 1, 1))
dateEdit.setMaximumDate(QDate(2022, 12, 31))

5. 获取日期信息

使用date()函数可以获取QDateEdit控件当前选中的日期。

selectedDate = dateEdit.date()

6. 完整示例1

下面是一个完整的示例代码,实现了创建一个QDateEdit控件,设置默认日期和日期范围,同时输出当前选中的日期信息。

from PyQt5.QtWidgets import QApplication, QWidget, QDateEdit
from PyQt5.QtCore import QDate

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

    def initUI(self):
        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('QDateEdit Example')

        dateEdit = QDateEdit(self)
        dateEdit.setMinimumWidth(200)
        dateEdit.setDate(QDate.currentDate())
        dateEdit.setMinimumDate(QDate(2000, 1, 1))
        dateEdit.setMaximumDate(QDate(2022, 12, 31))
        dateEdit.dateChanged.connect(self.onDateChanged)

        self.show()

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

if __name__ == '__main__':
    app = QApplication([])
    ex = DateEditExample()
    app.exec_()

7. 完整示例2

下面是另一个完整的示例代码,它创建了两个QDateEdit控件,并同步它们的日期信息。

from PyQt5.QtWidgets import QApplication, QWidget, QDateEdit
from PyQt5.QtCore import QDate

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

    def initUI(self):
        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('QDateEdit Example')

        dateEdit1 = QDateEdit(self)
        dateEdit1.setMinimumWidth(200)
        dateEdit1.setDate(QDate.currentDate())
        dateEdit1.dateChanged.connect(lambda date: self.updateDateEdit(dateEdit2, date))

        dateEdit2 = QDateEdit(self)
        dateEdit2.setMinimumWidth(200)
        dateEdit2.setDate(QDate.currentDate())
        dateEdit2.dateChanged.connect(lambda date: self.updateDateEdit(dateEdit1, date))

        self.show()

    def updateDateEdit(self, dateEdit, date):
        dateEdit.blockSignals(True)
        dateEdit.setDate(date)
        dateEdit.blockSignals(False)

if __name__ == '__main__':
    app = QApplication([])
    ex = DateEditExample()
    app.exec_()

该示例使用了lambda表达式和blockSignals()函数来实现了两个QDateEdit控件之间的日期信息同步。