PyQt5 – QDateEdit

  • Post category:Python

当我们需要在Python应用程序中添加日期输入控件时,可以使用PyQt5模块中的QDateEdit控件。QDateEdit控件是Qt提供的日期选择器,可以允许用户以交互的方式选择日期,并将结果返回到Python应用程序中。

1. 安装PyQt5模块

在使用QDateEdit控件之前,需要确保已经安装了PyQt5模块。如果还没有安装,可以使用以下命令在终端中进行安装:

pip install PyQt5

2. 创建QDateEdit控件

可以使用以下代码创建一个简单的QDateEdit控件:

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

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.date_edit = QDateEdit()
        self.date_edit.setCalendarPopup(True)
        self.date_edit.setDate(QDate.currentDate())

        layout = QVBoxLayout()
        layout.addWidget(self.date_edit)

        self.setLayout(layout)

app = QApplication([])
window = MyWindow()
window.show()
app.exec_()

在上面的代码中,创建了一个MyWindow类的实例,该类继承自QWidget基类。在__init__()方法中,创建了一个QDateEdit控件。使用setCalendarPopup(True)方法可以启用弹出式日历,使用setDate()方法将控件的默认日期设置为当前日期。

最后,创建一个QVBoxLayout布局管理器,并将控件添加到该布局中。将布局设置为控件的主布局。

3. 获取QDateEdit控件中的日期

使用QDateEdit控件,可以获取用户选择的日期。可以在按钮单击或其他事件中使用以下代码来检索选定的日期:

date = self.date_edit.date().toString("yyyy-MM-dd")

在上面的代码中,调用QDateEdit控件的date()方法将返回一个QDate对象,该对象代表用户选择的日期。使用toString()方法以指定的格式检索日期。

示例1: 显示来自QDateEdit控件的日期

假设有一个QDateEdit控件,需要在另一个QLabel控件中显示用户选择的日期。可以使用以下代码来实现:

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

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.date_edit = QDateEdit()
        self.date_edit.setCalendarPopup(True)
        self.date_edit.setDate(QDate.currentDate())
        self.date_edit.dateChanged.connect(self.on_date_changed)

        self.label = QLabel()

        layout = QVBoxLayout()
        layout.addWidget(self.date_edit)
        layout.addWidget(self.label)

        self.setLayout(layout)

    def on_date_changed(self, date):
        self.label.setText(date.toString("yyyy-MM-dd"))

app = QApplication([])
window = MyWindow()
window.show()
app.exec_()

在上面的代码中,创建了一个QLabel控件。在QDateEdit控件的dateChanged信号中,将调用on_date_changed()方法。在该方法中,将通过QLabel控件显示选定的日期。

在MyWindow类的构造函数中,创建了并配置了控件和布局。在监听dateChanged信号时,将指定on_date_changed()方法为槽。最后,将两个控件添加到主布局中。

示例2: 将QDateEdit控件与QTableView控件一起使用

假设有一个PyQt5的QTableView控件,需要添加一个QDateEdit控件,用户可以在该控件中选择日期,并将此日期添加到表中的指定位置。可以使用以下代码来实现:

from PyQt5.QtWidgets import QDateEdit, QGridLayout, QLabel, QMainWindow, QPushButton, QTableView, QVBoxLayout, QWidget, QApplication
from PyQt5.QtCore import QDate, Qt
from PyQt5.QtGui import QStandardItemModel, QStandardItem

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建QTableView对象
        self.table_view = QTableView()
        self.model = QStandardItemModel(4, 2)
        self.model.setHorizontalHeaderLabels(["日期", "数值"])
        self.table_view.setModel(self.model)

        # 创建QDateEdit对象
        self.date_edit = QDateEdit()
        self.date_edit.setCalendarPopup(True)
        self.date_edit.setDate(QDate.currentDate())
        self.date_edit.dateChanged.connect(self.on_date_changed)

        # 创建QPushButton对象
        self.button_add = QPushButton("Add")
        self.button_add.clicked.connect(self.on_button_add_clicked)

        # 设置布局
        self.layout = QGridLayout()
        self.layout.addWidget(self.table_view, 0, 0, 1, 2)
        self.layout.addWidget(QLabel("日期:"), 1, 0)
        self.layout.addWidget(self.date_edit, 1, 1)
        self.layout.addWidget(self.button_add, 2, 0, 1, 2)
        widget = QWidget()
        widget.setLayout(self.layout)
        self.setCentralWidget(widget)

    def on_date_changed(self, date):
        self.current_date = date

    def on_button_add_clicked(self):
        row = self.model.rowCount()
        items = [QStandardItem(self.current_date.toString("yyyy-MM-dd")), QStandardItem("0")]
        self.model.insertRow(row, items)

app = QApplication([])
window = MyWindow()
window.show()
app.exec_()

在上面的代码中,创建了一个MyWindow类的实例。在__init__()方法中,创建了QTableView、QDateEdit和QPushButton控件,并在QDateEdit控件的dateChanged信号中,将选中的日期存储在current_date实例变量中。

在单击“添加”按钮时,将调用on_button_add_clicked()方法。在该方法中,将创建一个新的QStandardItem,并将其添加到表的底部。

我们在示例2中使用了QDateEdit控件实现了与QTableView控件的结合使用,使得用户可以在表中添加日期信息。