Как установить флажок в первом столбце 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
соответственно.