Как установить флажок в первом столбце QTableView в pyqt

В моем QTableView я пытаюсь получить первый столбец флажков, но я получаю все столбцы строки, заполненные флажками, а также все они отмечены по умолчанию. Я также не могу изменить состояние флажков.

class MyTableModel(QtCore.QAbstractTableModel):
    def __init__(self, listData=[[]], headers=[], parent=None):
        super(MyTableModel, self).__init__(parent)

        self.__listData = listData
        self.__headers = headers


    def data(self, index, role):
        row = index.row()
        column = index.column()
        value = self.__listData[row][column]

        if role == QtCore.Qt.CheckStateRole:
            if self.__listData[row] == 0:
                return QtCore.QVariant(QtCore.Qt.Unchecked)
            else:
                return QtCore.QVariant(QtCore.Qt.Checked)
        if role == QtCore.Qt.EditRole:
            return value
        if role == QtCore.Qt.DisplayRole:
            return value

2 ответа

Не будем сейчас о PyQT, но думаю, что нет никакой разницы с C++Qt. Вы должны переопределить Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex & index) const и вернитесь к своей проверяемой колонке Qt::ItemIsUserCheckable,

Просто наткнулся на этот вопрос. Не уверен, что вы нашли ответ. Чтобы ответить на ваш вопрос, если вы хотите установить флажки только для первого столбца, вам необходимо вернуть QtCore.Qt.Unchecked или же QtCore.Qt.Checked только для index с column == 0, Итак, вы можете изменить свой код на:

def data(self, index, role):
    row = index.row()
    column = index.column()
    value = self.__listData[row][column]

    if role == QtCore.Qt.CheckStateRole and column == 0:
        if self.__listData[row] == 0:
            return QtCore.QVariant(QtCore.Qt.Unchecked)
        else:
            return QtCore.QVariant(QtCore.Qt.Checked)
    if role == QtCore.Qt.EditRole:
        return value
    if role == QtCore.Qt.DisplayRole:
        return value

И вы можете проверить, если index в self.__listData и вернуться QtCore.Qt.Unchecked или же QtCore.Qt.Checked соответственно.

Другие вопросы по тегам