Python QDateEdit增量

时间:2017-02-09 14:18:52

标签: python-2.7 pyside qdate

我在Python中使用GUI中的QDateEdit控件。我想通过使用键盘来控制它,所以当我按向上箭头键时,它会从31-jan-2000变为01-feb-2000,例如。

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

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

提前致谢。

enter image description here

1 个答案:

答案 0 :(得分:1)

可以通过重新实现stepBy

来覆盖默认行为
class DateEdit(QtGui.QDateEdit):    
    def stepBy(self, steps):
        self.setDateTime(self.dateTime().addDays(steps)) 

但是,完全不能完美地工作,因为光标必须年度部分中才能获得连续增量。如果它在月份部分中,它只会增加一年中的所有月/日;如果它在天部分,它只会递增到该月的所有日期。就我个人而言,我认为我会把它视为一个“特征”,并将其留在那里(因为实现非常简单)。

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

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))