我在Python中使用GUI中的QDateEdit控件。我想通过使用键盘来控制它,所以当我按向上箭头键时,它会从31-jan-2000变为01-feb-2000,例如。
目前,它只是独立地改变年,月和日,但我想像块一样改变它,按日历天增加。
在gif中,你可以看到控件的行为,我独立地改变了日,月和年,但我无法将其改为“整个日期”。
提前致谢。
答案 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))