Python QDateEdit增量

Python QDateEdit increment

我在 Python 的 GUI 中使用 QDateEdit 控件。我只想使用键盘来控制它,所以当我按下向上箭头键时,它会从 2000 年 1 月 31 日变为 2000 年 2 月 1 日,例如。

目前,它只是独立地更改年月日,但我想像块一样更改它,按日历天数增加。

在 gif 中,您可以看到控件的行为,我单独更改了日、月和年,但我无法将其更改为 "whole date"。

提前致谢。

可以通过重新实现来覆盖默认行为 stepBy:

class DateEdit(QtGui.QDateEdit):    
    def stepBy(self, steps):
        self.setDateTime(self.dateTime().addDays(steps)) 

但是,这 相当 工作得很好,因为光标 必须 位于 年份部分 以获得连续增量。如果它在月部分,它只会递增到一年中的所有months/days;如果它在 天部分 ,它只会在一个月的所有天数中递增。就我个人而言,我认为我会将其视为 "feature",并保留它(因为实现非常简单)。

您可以尝试强制光标停留在 年份部分 ,但这会阻止手动编辑,从而显着降低可用性。但是,我想你可以使用 calendar-popup 提供手动编辑,然后使 line-edit read-only:

class DateEdit(QtGui.QDateEdit):
    def __init__(self, *args, **kwargs):
        super(DateEdit, self).__init__(*args, **kwargs)
        self.setCalendarPopup(True)
        edit = self.lineEdit()
        edit.setReadOnly(True)
        edit.selectionChanged.connect(lambda edit=edit: edit.end(False))

    def stepBy(self, steps):
        self.setDateTime(self.dateTime().addDays(steps))