【问题标题】:Pyqt5 QStandarditemModel get item indexPyqt5 QStandarditemModel 获取项目索引
【发布时间】:2020-04-18 17:15:27
【问题描述】:

我在表格视图中有一个 QStandarditemModel,如下所示:

model = QStandardItemModel(0, 4)
table = QTableView()
table.setModel(self.model)

然后,我连续添加q个QCombobox

x2 = QComboBox()
tabel.setIndexWidget(model.index(1, 1), x2)

我正在尝试获取项目(组合框)的行索引。我尝试使用

item = sender()
tabel.Indexof(item)

有没有办法在选择 QComboBox 时获取行索引

【问题讨论】:

  • 无法直接访问它,您必须以某种方式对其进行跟踪。一个简单的字典就可以解决问题:每次创建一个新的小部件时,使用self.widgetMapping[widget] = (row, column) 之类的东西(最好使用表格坐标,而不是QModelIndexes),然后您可以使用model.index(*self.widgetMapping[self.sender()]) 获取索引。请记住,setIndexWidget() 应谨慎使用,通常最好先使用项目委托,然后再使用openPersistentEditor(index)
  • PS:不要盲目尝试“随机”功能。请阅读并在文档中搜索:在您的情况下,与 QTableView 及其祖先 QAbstractItemView 相关的页面。

标签: python pyqt pyqt5


【解决方案1】:

获取行有几种方法:

  • 使用字典:将小部件映射到字典中,以将键关联到小部件,将值关联到行(和/或列):
self.d = dict()
x2 = QComboBox()
tabel.setIndexWidget(model.index(1, 1), x2)
self.d[x2] = (row, column)
o = sender()
pos = self.d.get(o)
if pos is not None:
    row, col = pos
    print(row)
  • 使用几何:
o = sender()
if isinstance(o, QWidget):
   ix = tabel.indexAt(o.pos())
   print(ix.row())

【讨论】:

  • 非常感谢。我缺少的是 tabel.row()。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 2014-08-31
  • 2017-03-17
相关资源
最近更新 更多