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的数据类型是什么? strdatetime? 【参考方案1】:

假设itemdatetime对象,可以使用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 的列设置为以日期格式显示的主要内容,如果未能解决你的问题,请参考以下文章

如何将文本与 QTableWidget 中的单元格中心对齐

如何将文本与 QTableWidget 中的单元格中心对齐

如何将文本与QTableWidget中的单元格中心对齐

如何在 Python 中为 QTableWidget 设置大小提示

在 Python 中:一次将 QtableWidget 中的所有条目插入数据库表中

如何冻结 QTableWidget python 中的特定行/列?