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