AttributeError: 'QTableWidget' object has no attribute 'setRichText'
时间: 2025-07-19 13:15:32 浏览: 3
你遇到的错误:
```
AttributeError: 'QTableWidget' object has no attribute 'setRichText'
```
是因为你试图在 `QTableWidget` 上调用 `setRichText()` 方法,但这个方法并不存在于 `QTableWidget` 类中。
---
### ❌ 错误原因
- `QTableWidget` 本身 **没有 `setRichText()` 方法**。
- 这个方法属于 `QTextEdit`、`QLabel` 等控件,用于控制是否启用富文本渲染。
- 而你在 `QTableWidget` 上调用它,自然会报错。
---
### ✅ 正确做法
如果你希望 `QTableWidgetItem` 能正确显示 HTML 内容,**只需要在设置文本时使用 `setText()` 方法,并确保 HTML 格式正确即可**。
你不需要调用 `setRichText()`,因为 `QTableWidgetItem` 默认就支持富文本(HTML)。
---
### ✅ 修改建议
#### ✅ 1. 删除错误代码:
```python
self.tableWidget.setRichText(True) # ❌ 删除这行
```
#### ✅ 2. 确保 `QTableWidgetItem` 使用 `setText()` 设置 HTML 内容:
```python
item = QtWidgets.QTableWidgetItem()
item.setText(html_text) # ✅ 这样就能显示 HTML
```
#### ✅ 3. 推荐设置(放在初始化时):
```python
self.tableWidget = QtWidgets.QTableWidget(self.tab)
self.tableWidget.setGeometry(QtCore.QRect(0, 0, 1031, 940))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(5)
self.tableWidget.setRowCount(150)
# ✅ 推荐设置(不影响 HTML,但有助于显示)
self.tableWidget.setTextElideMode(Qt.ElideNone) # 禁止省略号
self.tableWidget.setWordWrap(True) # 允许自动换行
```
---
### ✅ 完整示例:`update_table_row` 函数
```python
def update_table_row(self, row_index, item_data):
can_id = item_data[1]
current_data = item_data[4] # 数据列(例如:"11 22 AA BB...")
old_data = self.last_data_by_id.get(can_id, None)
if old_data and old_data != current_data:
old_bytes = old_data.split()
current_bytes = current_data.split()
html_text = ""
for o, c in zip(old_bytes, current_bytes):
if o != c:
html_text += f'<span style="background-color: red; color: white;">{c}</span> '
else:
html_text += f'{c} '
item = QtWidgets.QTableWidgetItem()
item.setTextAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
item.setFlags(item.flags() ^ QtCore.Qt.ItemIsEditable)
item.setText(html_text) # ✅ 使用 setText 显示 HTML
self.tableWidget.setItem(row_index, 4, item)
else:
item = QtWidgets.QTableWidgetItem(current_data)
item.setFlags(item.flags() ^ QtCore.Qt.ItemIsEditable)
self.tableWidget.setItem(row_index, 4, item)
self.last_data_by_id[can_id] = current_data
```
---
### ✅ 补充说明
| 方法 | 是否支持 HTML | 控件类型 |
|------|----------------|-----------|
| `setText("<b>bold</b>")` | ✅ 支持 | `QTableWidgetItem` |
| `setData(Qt.DisplayRole, "<b>bold</b>")` | ❌ 不支持 | `QTableWidgetItem` |
| `setRichText(True)` | ✅ 支持 | `QLabel`, `QTextEdit` |
| `setCellWidget(QLabel(...))` | ✅ 支持 | `QTableWidget` |
---
###
阅读全文
相关推荐


















