如何在pyqt中获取QTableView第一列的复选框
How to get checkbox in first column of QTableView in 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
现在不了解 PyQT,但认为与 c++Qt 没有区别。
您需要为可检查列 Qt::ItemIsUserCheckable
.
覆盖 Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex & index) const
和 return
刚遇到这个问题。不确定你是否找到了答案。
要回答你的问题,如果你只想要第一列的复选框,你将需要 return 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
和 return QtCore.Qt.Unchecked
或 QtCore.Qt.Checked
中。
在我的 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
现在不了解 PyQT,但认为与 c++Qt 没有区别。
您需要为可检查列 Qt::ItemIsUserCheckable
.
Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex & index) const
和 return
刚遇到这个问题。不确定你是否找到了答案。
要回答你的问题,如果你只想要第一列的复选框,你将需要 return 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
和 return QtCore.Qt.Unchecked
或 QtCore.Qt.Checked
中。