Python QDateEdit приращение

Я использую элемент управления QDateEdit в графическом интерфейсе в Python. Я хочу управлять им просто с помощью клавиатуры, поэтому, когда я нажимаю клавишу со стрелкой вверх, она изменяется с 31 января 2000 года на 01 февраля 2000 года, например.

В настоящее время он просто меняет год, месяц и день независимо, но я хочу изменить его, как блок, увеличивая на календарные дни.

На рисунке вы можете увидеть поведение элемента управления, я изменил день, месяц и год независимо друг от друга, но я не мог изменить его как "целую дату".

Заранее спасибо.

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))
Другие вопросы по тегам