我在 Python 的 GUI 中使用 QDateEdit 控件。我想只使用键盘来控制它,所以当我按下向上箭头键时,它会从 2000 年 1 月 31 日变为 2000 年 2 月 1 日。
目前,它只是独立地改变年、月和日,但我想像一个块一样改变它,增加日历天数。
在 gif 中,您可以看到控件的行为,我独立更改了日、月和年,但我无法将其更改为“整个日期”。
提前致谢。
我在 Python 的 GUI 中使用 QDateEdit 控件。我想只使用键盘来控制它,所以当我按下向上箭头键时,它会从 2000 年 1 月 31 日变为 2000 年 2 月 1 日。
目前,它只是独立地改变年、月和日,但我想像一个块一样改变它,增加日历天数。
在 gif 中,您可以看到控件的行为,我独立更改了日、月和年,但我无法将其更改为“整个日期”。
提前致谢。
可以通过重新实现来覆盖默认行为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))