pyqt tablewidget 内嵌进度条
时间: 2024-08-20 16:00:45 浏览: 70
python如何通过pyqt5实现进度条
PyQt中的TableWidget通常用于显示表格数据,但如果需要在表格单元格内添加进度条,你可以通过创建自定义的 QTableWidgetItem 类来实现。首先,你需要创建一个 QWidget 或者 QProgressBar 的子类,并将它设置为 QTableWidgetItem 的数据部分。然后,在 TableWidget 中设置该定制项。
以下是一个简单的步骤说明:
1. 创建一个继承自 QAbstractItemDelegate 的子类,如 CustomProgressDelegate:
```python
from PyQt6.QtWidgets import QApplication, QWidget, QTableView, QProgressBar
from PyQt6.QtGui import QPainter, QColor, QFontMetrics
from PyQt6.QtCore import Qt
class CustomProgressDelegate(QAbstractItemDelegate):
def paint(self, painter, option, index):
super().paint(painter, option, index)
progress_bar = QProgressBar()
progress_bar.setValue(index.model().data(index, Qt.UserRole + 1)) # 用户自定义的角色,例如进度值
progress_bar.setStyleSheet('QProgressBar { background-color: transparent; border: none; }')
painter.save()
progress_bar.setGeometry(option.rect.x(), option.rect.y(), option.rect.width(), option.rect.height())
progress_bar.paintEvent(painter)
painter.restore()
```
2. 在TableWidget上设置自定义 delegate:
```python
table_view = QTableView(parent)
delegate = CustomProgressDelegate(table_view)
# 设置 delegate 到桌视图上
table_view.setItemDelegate(delegate)
# 添加一些行数据,其中包含进度值
model = QStandardItemModel()
row = QStandardItem('Row 1')
progress_value = QStandardItem('0%')
progress_value.setData(0, Qt.UserRole + 1) # 设置进度值
row.appendChild(progress_value)
model.appendRow(row)
table_view.setModel(model)
```
当你在 `model` 中更新 `Qt.UserRole + 1` 所对应的进度值时,对应单元格内的进度条就会相应变化。
阅读全文