You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何设置QTableWidget的指定列以日期格式显示

问题原因
  • 原代码中QDateEdit().setDisplayFormat()方法返回值为None,传入setCellWidget无法生效
  • 后续执行setItem时直接覆盖了第二列的单元格内容,之前的格式设置完全没有生效
  • 直接将datetime类型的datum字段转为字符串会默认携带时间部分
修改方案

方案1:无需编辑功能,直接格式化字符串(推荐,性能更好)

直接在设置单元格内容时对日期字段做格式化,不需要插入控件:

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):
            # 第二列(索引1)是日期字段,单独格式化
            if column == 1:
                # 如果item是datetime对象,用strftime格式化
                format_date = item.strftime("%d.%m.%Y")
                self.tableWidget.setItem(row, column, QTableWidgetItem(format_date))
            else:
                self.tableWidget.setItem(row, column, QTableWidgetItem(str(item)))

如果datum字段查出来是字符串类型的日期时间,就先解析再格式化:

from datetime import datetime
# 把上面的format_date行替换为以下内容,解析格式要和你实际的字符串格式匹配
format_date = datetime.strptime(item, "%Y-%m-%d %H:%M:%S").strftime("%d.%m.%Y")

方案2:需要保留日期编辑功能,正确使用QDateEdit控件

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):
            if column == 1:
                # 先实例化QDateEdit,设置日期和格式
                date_edit = QDateEdit()
                date_edit.setDisplayFormat("dd.mm.yyyy")
                # 给控件赋值,item如果是datetime就转成QDate
                date_edit.setDate(item.date() if hasattr(item, 'date') else QDate.fromString(str(item), "yyyy-MM-dd"))
                # 如果不需要编辑可以加上这行,需要编辑就删除
                date_edit.setReadOnly(True)
                self.tableWidget.setCellWidget(row, column, date_edit)
            else:
                self.tableWidget.setItem(row, column, QTableWidgetItem(str(item)))

内容的提问来源于stack exchange,提问作者accpert.com

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 06:15:04