在 PyQt5 中,你可以通过在 QTableWidget
的单元格内插入一个 QProgressBar
来实现进度条。要让进度条的大小与单元格大小保持一致,可以将 QProgressBar
嵌入到 QTableWidgetItem
中,并使用布局管理器来自动调整进度条的大小。
以下是实现方法的代码示例:
import sys
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QProgressBar, QWidget, QVBoxLayout, QTableWidgetItem
class ProgressBarWidget(QWidget):
def __init__(self, parent=None):
super(ProgressBarWidget, self).__init__(parent)
# 创建进度条
self.progressBar = QProgressBar(self)
self.progressBar.setMinimum(0)
self.progressBar.setMaximum(100)
self.progressBar.setValue(50) # 设置默认的进度值,可根据需要更改
# 使用 QVBoxLayout 使进度条自适应父窗口大小
layout = QVBoxLayout()
layout.addWidget(self.progressBar)
layout.setContentsMargins(0, 0, 0, 0) # 去除内边距
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication(sys.argv)
# 创建一个 QTableWidget
table = QTableWidget(5, 3)
# 设置表头内容
table.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"])
# 在第二行第二列插入一个自定义的进度条小部件
progress_widget = ProgressBarWidget()
table.setCellWidget(1, 1, progress_widget)
# 设置表格的内容
for i in range(5):
for j in range(3):
if not (i == 1 and j == 1): # 跳过已经设置进度条的单元格
table.setItem(i, j, QTableWidgetItem(f"Item {i+1},{j+1}"))
# 显示表格
table.show()
sys.exit(app.exec_())
-
ProgressBarWidget
类:这是一个自定义的QWidget
,其中包含了一个QProgressBar
。通过QVBoxLayout
布局确保进度条能随着单元格大小的变化自动调整。 -
setCellWidget()
:使用setCellWidget()
将自定义的ProgressBarWidget
插入到指定的单元格中(示例中是第 2 行第 2 列,即(1, 1)
位置)。 -
布局自适应:通过将进度条放入
QVBoxLayout
,并将边距设置为0
,确保进度条的大小会随着单元格的大小自动适应。 -
进度值设置:在示例中,默认将进度条的进度值设置为
50
。你可以使用self.progressBar.setValue(进度值)
来动态更新进度条的进度。