如何从QtGui.QListWidget中获取当前项目的信息?

12

创建了一个QtGui.QListWidget列表窗口小部件:

myListWidget = QtGui.QListWidget()

通过QListWidgetItem列表项填充此ListWidget:

for word in ['cat', 'dog', 'bird']:
    list_item = QtGui.QListWidgetItem(word, myListWidget)

现在在list_item的左击事件上连接一个函数:

def print_info():
    print myListWidget.currentItem().text()


myListWidget.currentItemChanged.connect(print_info)

从我的代码中可以看出,当我左击一个列表项时,我只能得到该列表项的标签名称。但除了标签名称之外,我还想得到列表项的索引号(在ListWidget中显示的顺序号)。我希望能够尽可能多地获取关于已左击列表项的信息。我查看了dir(my_list_item)。但是除了已经使用的my_list_item.text()方法返回列表项的标签名称之外,我找不到任何有用的东西。提前致谢!

2个回答

26

使用QListWidget.currentRow来获取当前项目的索引:

def print_info():
    print myListWidget.currentRow()
    print myListWidget.currentItem().text()

QListWidgetItem并不知道它自己的索引:这取决于列表小部件来管理。

您还应该注意,currentItemChanged会将当前项目和先前的项目作为参数发送,因此您可以简化为:

def print_info(current, previous):
    print myListWidget.currentRow()
    print current.text()
    print current.isSelected()
    ...

如何在多个选择中使用? - laserpython
@laserpython。QListWidget.selectedItems - ekhumoro
@ekhumoro 我的意思是如何获取所选项目的索引?selectedItems只返回文本值,而不是索引...有currentRow()但没有currentRows()。 - laserpython
请阅读我链接的文档。selectedItems()方法返回一个项目列表,而不是文本。只能有一个当前项目,因此currentRows()没有意义。要从项目获取QModelIndex,请使用QListWidget.indexFromItem - ekhumoro

2

嗯,我已经列出了一些关于当前项目可以显示的内容,如果你需要更多的东西,那么你应该查阅PyQt文档。 链接

 def print_info():
    print myListWidget.currentItem().text()
    print myListWidget.row(myListWidget.currentItem())
    print myListWidget.checkState()  # if it is a checkable item
    print myListWidget.currentItem().toolTip().toString()
    print myListWidget.currentItem().whatsThis().toString()

myListWidget.currentItemChanged.connect(print_info)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接