Делегат пользовательского элемента pyqt для qtablewidget
Вопрос
У меня есть QTableWidget с 5 столбцами. Как мне сделать все элементы в столбце 2 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)
Но индикатор выполнения вообще не отображается.Есть идеи?
Решение
Как сказал Маркони,
QTableWidget.setCellWidget(row, column, QWidget)
добавляет 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
таблица с "foo" в cell 0,0
, а QComboBox
в cell 0,1
и QCheckBox
в cell 0,2
.
Другие советы
Модель должна вернуться itemEditable
в flags()
Не связан с StackOverflow