【问题标题】:Getting selected rows in QListWidget在 QListWidget 中获取选定的行
【发布时间】:2016-02-28 09:34:33
【问题描述】:

我有一个Qlistwidget,我可以在其中选择多个项目。我可以获取列表小部件中所有选定项目的列表,但找不到获取相应行列表的方法。要获取列表小部件中所选项目的列表,我使用了以下代码:

print [str(x.text()) for x in self.listWidget.selectedItems()]

要检索我正在寻找的行,例如:

a = self.listWidget.selectedIndexes()
print a

但这不起作用。我还尝试了一些导致这样的输出的代码,这不是很有用:

<PyQt4.QtGui.QListWidgetItem object at 0x0000000013048B88>
<PyQt4.QtCore.QModelIndex object at 0x0000000014FBA7B8>

【问题讨论】:

  • “索引”是指行吗?索引和行号在 Qt 中不是一回事。如果你的意思是行,我建议编辑你的问题(包括标题)。
  • 我想我需要行是的,我会改变它

标签: python qt pyqt qlistwidget


【解决方案1】:

selectedIndexes 和 QModelIndex 应该是你所需要的。

liwidg = QtGui.QListWidget()
liwidg.show()
liwidg.setSelectionMode( QtGui.QAbstractItemView.SelectionMode.ExtendedSelection)
liwidg.addItems(["a", "b", "c", "d"])
liwidg.selectedIndexes()

When selected 'a', 'b', and 'c' liwidg.selectedIndexes() Gives:

[<PySide.QtCore.QModelIndex(0,0,0xb266478,QListModel(0xb0e6400) )   at 0x0C86EB20>,
 <PySide.QtCore.QModelIndex(1,0,0xb266518,QListModel(0xb0e6400) )   at 0x0C861D78>,
 <PySide.QtCore.QModelIndex(2,0,0xb2843c8,QListModel(0xb0e6400) )   at 0x0C869AF8>]

您可以使用 QModelIndex 来获取您需要的任何信息。

sel0 = liwidg.selectedIndexes()[0]
# <PySide.QtCore.QModelIndex(0,0,0xb266478,QListModel(0xb0e6400) )   at 0x0C85B530>

print(sel0.data())
print(sel0.row())
print(sel0.column())

打印:

'a'
0
0

这对我有用。

【讨论】:

  • 谢谢,这正是我需要的
【解决方案2】:

奇怪的输出是因为你得到了QModelIndexQListWidgetItem 类型的对象。 QModelIndex 对象有一个方法来获取它的行,所以你可以使用:

[x.row() for x in self.listWidget.selectedIndexes()]

获取所有选定索引的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2017-08-16
    • 2017-10-19
    相关资源
    最近更新 更多