Делегат пользовательского элемента pyqt для qtablewidget

StackOverflow https://stackoverflow.com/questions/2032682

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть 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()

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top