[PyQt] QDateEdit keeps me strictly in current month

Sibylle Koczian Sibylle.Koczian at t-online.de
Wed Jan 2 17:23:39 GMT 2008


Hello,

to my inexperienced eyes this looks like a bug: a QDateEdit should let me 
choose any day in the last month, but I can't get to dates this past 
December. Direct editing doesn't work, using the arrow for earlier dates 
doesn't work. 

If I change the date range to November 2, 2007 until December 2, 2007, I can 
reach every day if I change first the month and then the day. This isn't very 
intuitive using my normal date format (day.month.year), but at least it 
works. For December 2, 2007 to January 2, 2008 I didn't find any workaround.

My suspicion: this happens, because the date has to stay valid all through the 
editing process, and this isn't always possible.

Here is my test application. Changing between 
lastdate = today 
and 
lastdate = today.addMonths(-1) (commented out)
should demonstrate the problem.

# test_dateedit_dlg.py
# QDateEdit testen

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class TestDateDlg(QDialog):

    def __init__(self, parent=None):
        super(TestDateDlg, self).__init__(parent)
        today = QDate.currentDate()
        lastdate = today
#        lastdate = today.addMonths(-1)
        firstdate = today.addMonths(-2)
        self.edDate = QDateEdit()
        self.edDate.setDateRange(firstdate, lastdate)
        self.edDate.setDate(lastdate)
        self.edDate.setDisplayFormat('dd.MM.yyyy')
        self.datelist = QListWidget()
        self.datelist.addItem(QString('Starting date: %1')\
                              .arg(lastdate.toString(Qt.ISODate)))
        self.datelist.addItem(QString('Current date: %1')\
                              .arg(firstdate.toString(Qt.ISODate)))
        layout = QVBoxLayout()
        layout.addWidget(self.edDate)
        layout.addWidget(self.datelist)
        self.setLayout(layout)
        self.connect(self.edDate, SIGNAL('editingFinished()'), self.logDate)

    def logDate(self):
        newdate = self.edDate.date().toString(Qt.ISODate)
        self.datelist.addItem(QString('New date: %1').arg(newdate))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = TestDateDlg()
    form.show()
    app.exec_()



-- 
Dr. Sibylle Koczian


More information about the PyQt mailing list