首页 > 解决方案 > 如何在没有 setIndexWidget 的情况下将 Widget 设置为 QAbstractTableModel 数据?

问题描述

我想在 QTableView 的第一行和第一列中插入一个 QRadioButton。我可以用 setIndexWidget 做到这一点。是否可以在 QAbstractTableModel.data 中设置 Widget 数据?

from PyQt5 import QtWidgets
from PyQt5 import QtCore
import sys

class TableModel(QtCore.QAbstractTableModel):
    def __init__(self, datas, parent=None):
        super(TableModel, self).__init__(parent)
        self._datas = datas

    def data(self, index, role=None):
        if role == QtCore.Qt.DisplayRole:
            return self._datas[index.row()][index.column()]

    def rowCount(self, parent=None, *args, **kwargs):
        return len(self._datas)

    def columnCount(self, parent=None, *args, **kwargs):
        return len(self._datas[0])

class MyQTableView(QtWidgets.QTableView):
    def __init__(self, parent=None):
        super(MyQTableView, self).__init__(parent)
        radio = QtWidgets.QRadioButton()

class MainQ(QtWidgets.QWidget):
    def __init__(self):
        super(MainQ, self).__init__()
        self.btn = QtWidgets.QPushButton('OK')
        self.view = MyQTableView(self)

        radio = QtWidgets.QRadioButton()
        self.model = TableModel([(radio,), ("b",), ("c",)])
        self.view.setModel(self.model)
        self.ly = QtWidgets.QVBoxLayout()
        self.ly.addWidget(self.view)
        self.setLayout(self.ly)


app = QtWidgets.QApplication(sys.argv)
table = MainQ()
table.show()
sys.exit(app.exec_())

标签: pythonpyqt5

解决方案


推荐阅读