Python:如何将 QTableWidget 的列设置为以日期格式显示
Posted
技术标签:
【中文标题】Python:如何将 QTableWidget 的列设置为以日期格式显示【英文标题】:Python: how to set a column of a QTableWidget to Display in Date Format 【发布时间】:2021-08-17 15:57:14 【问题描述】:def fill_buchungen(self):
self.tableWidget.setRowCount(0)
data = helper.select("Select buchungsid,datum,einnahme, ausgabe,buchungstext,belegnr,mwst from buchung")
for row , form in enumerate(data):
row_position = self.tableWidget.rowCount()
self.tableWidget.insertRow(row_position)
self.tableWidget.setCellWidget(row,1, QDateEdit().setDisplayFormat("dd-MM-yyyy"))
for column , item in enumerate(form):
self.tableWidget.setItem(row , column , QTableWidgetItem(str(item)))
这是我目前所拥有的。第二列显示日期加时间。但我只想将它作为 Date 'dd.mm.yyyy'
【问题讨论】:
for column , item in enumerate(form)
中item
的数据类型是什么? str
或 datetime
?
【参考方案1】:
假设item
为datetime
对象,可以使用strftime
方法指定日期时间字符串格式,例如:
for column , item in enumerate(form):
date_str = d.strftime("%d.%m.%y")
self.tableWidget.setItem(row , column , QTableWidgetItem(date_str))
【讨论】:
确实,这是最简单的解决方案。我现在有这个并且它可以工作:对于 column , item in enumerate(form): if column ==1: self.tableWidget.setItem(row , column , QTableWidgetItem(item.strftime("%d.%m.%Y" ))) else: self.tableWidget.setItem(row , column , QTableWidgetItem(str(item))) muchos Gracias! 不幸的是,这只适用于我的计算机,日期格式为 d.m.y。在其他日期格式的其他计算机上,它会失败,这是可以理解的。【参考方案2】:问题是您正在添加一个编辑单元格但您没有修改字符串,一个简单的解决方案是另一篇文章中指出的一个,更好的解决方案是将其转换为 QDateTime 并修改一个的 displayText 方法代表:
from datetime import datetime
def fill_buchungen(self):
self.tableWidget.setRowCount(0)
data = helper.select(
"Select buchungsid,datum,einnahme, ausgabe,buchungstext,belegnr,mwst from buchung"
)
for row, form in enumerate(data):
row_position = self.tableWidget.rowCount()
self.tableWidget.insertRow(row_position)
for column, item in enumerate(form):
table_item = QTableWidgetItem()
if isinstance(item, datetime):
item = QDateTime(item)
table_item.setData(Qt.DisplayRole, item)
self.tableWidget.setItem(row, column, table_item)
class DateDelegate(QStyledItemDelegate):
def displayText(self, value, locale):
if isinstance(value, QDateTime):
return locale.toString(value, "dd-MM-yyyy")
return super().displayText(value, locale)
date_delegate = DateDelegate(self.tableWidget)
self.tableWidget.setItemDelegateForColumn(1, date_delegate)
【讨论】:
不幸的是,这也不起作用,因为所有数据都以字符串形式从数据库中出来。所以我必须找到一种将字符串转换为本地日期格式的方法。以上是关于Python:如何将 QTableWidget 的列设置为以日期格式显示的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中为 QTableWidget 设置大小提示