QTableWidget.selectedItems()与多选的不兼容结果

时间:2013-12-03 07:47:45

标签: qt pyqt multi-select qtablewidget

我正在使用带有以下设置的 PyQt 表格小部件。

  • SelectionBehavior设置为1(仅选择行)
  • SelectionMode设置为3(ExtendedSelection)
  • 列为1,2,3,4,5,6,7,8
  • 行是A,B,C

当我使用 Ctrl 选择前两行时,QTableWidget.selectedItems()返回以下列表:

A1,A2,A3,A4,A5,A6,A7,A8,B1,B2,B3,B4,B5,B6,B7,B8

但是,如果我使用 Shift 来选择前两行,QTableWidget.selectedItems()将返回以下列表:

A1,B1,A2,B2,A3,B3,A4,B4,A5,B5,A6,B6,A7,B7,A8,B8

预测列表的顺序变得困难。 我看到,捕获按键事件并相应地处理列表是一种方法。 有没有更简单的方法来克服这种情况?

感谢您的帮助。

纳文

1 个答案:

答案 0 :(得分:1)

要获取特定列中的所有选定项,您可以使用表selectedRowsselection model方法。但请注意,这仅适用于选择所有列的行。此外,对于扩展选择,返回索引的顺序可能并不总是相同。因此,为了获得完全一致的结果,可以先对索引进行排序:

indexes = tablewidget.selectionModel().selectedRows(column)
for index in sorted(indexes):
    item = tablewidget.itemFromIndex(index)
    print(item.text())