2017-02-09 64 views
0

我在Python的GUI中使用QDateEdit控件。我想通过使用键盘来控制它,所以当我按下向上箭头键时,它会从31-Jan-2000更改为01-feb-2000。Python QDateEdit增量

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

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

在此先感谢。

enter image description here

+0

好吧,告诉我们你做了什么,至今.... – driconmax

+0

我把gif向你展示我的意思。谢谢。 – anvelascos

回答

1

有可能通过重新实现stepBy覆盖默认行为:

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

然而,这并不相当工作完美,因为游标必须是在年部分获得连续增量。如果它位于月份部分中,它将只在一年中的所有月份/日期增加;并且如果它位于日期部分中,则它只会在该月的所有日期内递增。就我个人而言,我认为我会将此视为一个“特征”,并将其留在那个位置(因为实施过程非常简单)。

您可以尝试强制光标停留在的年份部分,但这会阻止手动编辑,这会显着降低可用性。不过,我想你可以使用日历弹出,提供手动编辑,然后进行行编辑只读:

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