pyqt自定义qtablewidget项代理

1 投票
2 回答
5686 浏览
提问于 2025-04-15 17:49

我有一个包含5列的QTableWidget,我想把第二列的所有项目都设置成QProgressBar(进度条)。

我试过这样做:

self.downloads_table = QtGui.QTableWidget(0, 5)
self.downloads_table.setItemDelegateForColumn(2, DownloadDelegate(self))

其中DownloadDelegate是:

class DownloadDelegate(QItemDelegate):

  def __init__(self, parent=None):
    super(DownloadDelegate, self).__init__(parent)

  def createEditor(self, parent, option, index):
    return QProgressBar(parent)

但是进度条根本没有显示出来。有什么想法吗?

2 个回答

0

这个模型在 flags() 这个函数里必须返回 itemEditable

2

正如马可尼所说,

QTableWidget.setCellWidget(row, column, QWidget) 

这个代码会在指定的行和列位置(row, column)添加一个QWidget,并把QTableWidget作为它的父级。

比如,像下面这样的代码:

table = QTableWidget(1, 3)
item1 = QTableWidgetItem("foo")
comboBox = QComboBox()
checkBox = QCheckBox()
table.setItem(0,0,item1)
table.setCellWidget(0,1,comboBox)
table.setCellWidget(0,2,checkBox)

会给你一个 1x3 的表格,其中在 cell 0,0 里有 "foo",在 cell 0,1 里有一个 QComboBox,而在 cell 0,2 里有一个 QCheckBox

撰写回答