Most databases store dates in the format YYYY-MM-DD
. When using a QTableView
to display a database table in PyQt it’s useful to be able to display this in a different format. Being from the UK I’d rather have the date displayed in the UK style – DD/MM/YYYY
. This is where QStyledItemDelegate
comes in.
I’d put off looking into this for a while because whenever I tried to look in to using QStyledItemDelegate
I saw people mentioning paint methods. I know nothing about painting in PyQt and get quite scared when I see it mentioned. I really need to get over that.
Not to worry though, because it’s not needed…
Just subclass QStyledItemDelegate
and have it take the variable date_format in its __init__
method:
class DateFormatDelegate(QStyledItemDelegate):
def __init__(self, date_format):
QStyledItemDelegate.__init__(self)
self.date_format = date_format
def displayText(self, value, locale):
return value.toDate().toString(self.date_format)
This way we can customise the date format without changing the class making it a little more portable. On your QTableView call setItemDelegateForColumn() and pass it your column index and a new instance of your subclassed QStyledItemDelegate with a date format:
self.tableResults.setItemDelegateForColumn(3,
DateFormatDelegate('dd/MM/yyyy'))
Much easier than I expected.
Comments
comments powered by Disqus