0

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

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

在 gif 中,您可以看到控件的行为,我独立更改了日、月和年,但我无法将其更改为“整个日期”。

提前致谢。

在此处输入图像描述

4

1 回答 1

1

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

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

然而,这并不完美因为光标必须年份部分才能获得连续增量。如果它在月份部分,它只会在一年中的所有月份/日期中递增;如果它在day 部分,它只会在该月的所有日子中递增。就个人而言,我认为我会将其视为“功能”,然后将其保留(因为实现非常简单)。

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

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))
于 2017-02-09T18:58:17.783 回答