QTableView 对象没有属性 'setItemDelegateforColumn'
QTableView object has no attribute 'setItemDelegateforColumn'
我正在尝试使用自定义委托在 QTableView 的每一行的第一列中设置一个复选框。每当程序 运行s 时,我都会收到以下错误:
AttributeError: 'PySide.QtGui.QTableView' object has no attribute 'setItemDelegateforColumn'
我对 Python、Qt 和模型视图编程还很陌生,但我在另一个模块中拥有几乎相同的功能序列,并且可以完美运行。我熟悉 "object has no attribute errors",但我想知道标准(非自定义)对象中的某个属性是如何丢失的。
只是为了好玩,我尝试用 setItemDelegateforRow() 替换 setItemDelegateforColumn() 并得到相同的错误。有趣的是,我也尝试用 setItemDelegate() 替换它并得到一个充满复选框的 table - 这样就可以了。
我使用 Qt Designer 创建了一个具有多个选项卡 (QTabWidget) 的应用程序。在其中一个选项卡中,我有一个 table (QTableView)。 Qt Designer 创建的所有相关 UI 信息都在一个名为 lac_gui.py 的文件中。我的主程序调用一个函数,该函数 运行 使用 SQLAlchemy 进行查询,其中 returns 一个列表列表,将 table 中的行表示为 self.notes_data。一旦查询为 运行,将调用以下代码:
def create_notes_table(self):
#self.tableView_noteslist = QtGui.QTableView(self) <-- also tried setting directly as a QTableView object to make sure it wasn't being overridden something else. Same error.
self.model_notes = NotesTableModel(self, self.notes_data, self.notes_header)
self.checkbox_delegate = CheckBoxDelegate(self)
self.tableView_noteslist.setModel(self.model_notes)
self.tableView_noteslist.setItemDelegateforColumn(0, self.checkbox_delegate)
return self.tableView_noteslist
我为此 table 使用的模型如下 class:
class NotesTableModel(QtCore.QAbstractTableModel):
def __init__(self, parent, notes_data, notes_header, *args):
QtCore.QAbstractTableModel.__init__(self, parent, *args)
self.notes_data = notes_data
self.notes_header = notes_header
def rowCount(self, parent):
return len(self.notes_data)
def columnCount(self, parent):
if len(self.notes_data) > 0:
return len(self.notes_data[0])
else:
return 0
def data(self, index, role):
if not index.isValid():
return None
elif role == QtCore.Qt.TextAlignmentRole:
return QtCore.Qt.AlignLeft
elif role != QtCore.Qt.DisplayRole:
return None
else:
return self.notes_data[index.row()][index.column()]
def headerData(self, col, orientation, role):
if role == QtCore.Qt.TextAlignmentRole:
return QtCore.Qt.AlignLeft
if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
return self.notes_header[col]
return None
def sort(self, col, order):
self.emit(QtCore.SIGNAL("layoutAboutToBeChanged()"))
self.notes_data = sorted(self.notes_data,
key=operator.itemgetter(col))
if order == QtCore.Qt.DescendingOrder:
self.notes_data.reverse()
self.emit(QtCore.SIGNAL("layoutChanged()"))
def flags(self, index):
if index.column() == 0:
return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
else:
return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
def setData(self, index, new_value, role):
if not index.isValid():
return None
elif role != QtCore.Qt.EditRole:
return None
return self.notes_data[index.row()][index.column()]
相关文章来自lac_gui.py(来自Qt Designer):
self.tab_notes = QtGui.QWidget()
self.tab_notes.setObjectName("tab_notes")
self.tableView_noteslist = QtGui.QTableView(self.tab_notes)
我看不到 QTableView 在哪里被 subclass 编辑为其他东西(即便如此,如果我理解正确,它会保留原来的 methods/attributes,对吧)?
除了 names/references.
之外,其他模块中的代码几乎相同。
(FWIW - Python 3.4,Qt 4.8.5,Pyside 1.2.2)
提前致谢!
C++ 文档在 setItemDelegateForColumn
.
的 '..For..' 部分中具有大写 'F' 的成员函数
我很确定这一定是您在 python 版本中的问题。
我正在尝试使用自定义委托在 QTableView 的每一行的第一列中设置一个复选框。每当程序 运行s 时,我都会收到以下错误:
AttributeError: 'PySide.QtGui.QTableView' object has no attribute 'setItemDelegateforColumn'
我对 Python、Qt 和模型视图编程还很陌生,但我在另一个模块中拥有几乎相同的功能序列,并且可以完美运行。我熟悉 "object has no attribute errors",但我想知道标准(非自定义)对象中的某个属性是如何丢失的。
只是为了好玩,我尝试用 setItemDelegateforRow() 替换 setItemDelegateforColumn() 并得到相同的错误。有趣的是,我也尝试用 setItemDelegate() 替换它并得到一个充满复选框的 table - 这样就可以了。
我使用 Qt Designer 创建了一个具有多个选项卡 (QTabWidget) 的应用程序。在其中一个选项卡中,我有一个 table (QTableView)。 Qt Designer 创建的所有相关 UI 信息都在一个名为 lac_gui.py 的文件中。我的主程序调用一个函数,该函数 运行 使用 SQLAlchemy 进行查询,其中 returns 一个列表列表,将 table 中的行表示为 self.notes_data。一旦查询为 运行,将调用以下代码:
def create_notes_table(self):
#self.tableView_noteslist = QtGui.QTableView(self) <-- also tried setting directly as a QTableView object to make sure it wasn't being overridden something else. Same error.
self.model_notes = NotesTableModel(self, self.notes_data, self.notes_header)
self.checkbox_delegate = CheckBoxDelegate(self)
self.tableView_noteslist.setModel(self.model_notes)
self.tableView_noteslist.setItemDelegateforColumn(0, self.checkbox_delegate)
return self.tableView_noteslist
我为此 table 使用的模型如下 class:
class NotesTableModel(QtCore.QAbstractTableModel):
def __init__(self, parent, notes_data, notes_header, *args):
QtCore.QAbstractTableModel.__init__(self, parent, *args)
self.notes_data = notes_data
self.notes_header = notes_header
def rowCount(self, parent):
return len(self.notes_data)
def columnCount(self, parent):
if len(self.notes_data) > 0:
return len(self.notes_data[0])
else:
return 0
def data(self, index, role):
if not index.isValid():
return None
elif role == QtCore.Qt.TextAlignmentRole:
return QtCore.Qt.AlignLeft
elif role != QtCore.Qt.DisplayRole:
return None
else:
return self.notes_data[index.row()][index.column()]
def headerData(self, col, orientation, role):
if role == QtCore.Qt.TextAlignmentRole:
return QtCore.Qt.AlignLeft
if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
return self.notes_header[col]
return None
def sort(self, col, order):
self.emit(QtCore.SIGNAL("layoutAboutToBeChanged()"))
self.notes_data = sorted(self.notes_data,
key=operator.itemgetter(col))
if order == QtCore.Qt.DescendingOrder:
self.notes_data.reverse()
self.emit(QtCore.SIGNAL("layoutChanged()"))
def flags(self, index):
if index.column() == 0:
return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
else:
return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
def setData(self, index, new_value, role):
if not index.isValid():
return None
elif role != QtCore.Qt.EditRole:
return None
return self.notes_data[index.row()][index.column()]
相关文章来自lac_gui.py(来自Qt Designer):
self.tab_notes = QtGui.QWidget()
self.tab_notes.setObjectName("tab_notes")
self.tableView_noteslist = QtGui.QTableView(self.tab_notes)
我看不到 QTableView 在哪里被 subclass 编辑为其他东西(即便如此,如果我理解正确,它会保留原来的 methods/attributes,对吧)?
除了 names/references.
之外,其他模块中的代码几乎相同。(FWIW - Python 3.4,Qt 4.8.5,Pyside 1.2.2)
提前致谢!
C++ 文档在 setItemDelegateForColumn
.
我很确定这一定是您在 python 版本中的问题。