PyQt。如何在 QTableView 中插入一个小部件
PyQt. How to insert a widget in a QTableView
有一个table:
tab=QTableView()
sti=QStandardItemModel(parent=None)
sti.appendRow([QStandardItem(str(1)),QStandardItem(str(2)),QStandardItem(str(3)),QStandardItem(str(4))])
tab.setModel(sti)
tab.setEditTriggers(QAbstractItemView.NoEditTriggers)
有一个按钮:
btn=QPushButton('Press', self)
btn.clicked.connect(self.on_clicked)
btn.resize(btn.sizeHint())
任务:如何在 QStandardItem(str(4)) 的 table 单元格插入中插入按钮 btn?有class QTableWidget 的.setCellWidget() 方法,不过我继承自QTableView。如果我使用 QTableWidget,我将不能使用私有方法 .setModel()
为了能够插入小部件,您必须使用 setIndexWidget()
方法,其中与单元格关联的 QModelIndex()
必须作为第一个参数传递,考虑到行和列的索引从 0 开始,对于文本等于 str(4)
的项目,其坐标为 0, 3
:
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
app.setStyle("fusion")
tab = QTableView()
sti = QStandardItemModel()
sti.appendRow([QStandardItem(str(i)) for i in range(4)])
tab.setModel(sti)
tab.setEditTriggers(QAbstractItemView.NoEditTriggers)
tab.setIndexWidget(sti.index(0, 3), QPushButton("button"))
tab.show()
sys.exit(app.exec_())
如果您有 QStandardItem()
,您还可以通过 indexFromItem()
方法访问 QModelIndex
有一个table:
tab=QTableView()
sti=QStandardItemModel(parent=None)
sti.appendRow([QStandardItem(str(1)),QStandardItem(str(2)),QStandardItem(str(3)),QStandardItem(str(4))])
tab.setModel(sti)
tab.setEditTriggers(QAbstractItemView.NoEditTriggers)
有一个按钮:
btn=QPushButton('Press', self)
btn.clicked.connect(self.on_clicked)
btn.resize(btn.sizeHint())
任务:如何在 QStandardItem(str(4)) 的 table 单元格插入中插入按钮 btn?有class QTableWidget 的.setCellWidget() 方法,不过我继承自QTableView。如果我使用 QTableWidget,我将不能使用私有方法 .setModel()
为了能够插入小部件,您必须使用 setIndexWidget()
方法,其中与单元格关联的 QModelIndex()
必须作为第一个参数传递,考虑到行和列的索引从 0 开始,对于文本等于 str(4)
的项目,其坐标为 0, 3
:
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
app.setStyle("fusion")
tab = QTableView()
sti = QStandardItemModel()
sti.appendRow([QStandardItem(str(i)) for i in range(4)])
tab.setModel(sti)
tab.setEditTriggers(QAbstractItemView.NoEditTriggers)
tab.setIndexWidget(sti.index(0, 3), QPushButton("button"))
tab.show()
sys.exit(app.exec_())
如果您有 QStandardItem()
,您还可以通过 indexFromItem()
方法访问 QModelIndex