【问题标题】:Remove item from QListView\QListWidget by string name通过字符串名称从 QListView\QListWidget 中删除项目
【发布时间】:2016-01-03 11:55:14
【问题描述】:

在 PyQt4 中,如何通过名称字符串从 QListView\QListWidget 中删除项目?

def deleteItem(itemName):
    item = dialog.listWidget.indexFromItem(itemName)
    dialog.listWidget.takeItem(item)

这是我到目前为止所得到的,显然向indexFromItem 提供字符串不起作用...

【问题讨论】:

  • inventoryList 也是 listWidget 吗?
  • 抱歉,我用通用变量替换了我自己的变量,但忘记替换了。固定问题帖子。

标签: python pyqt pyqt4


【解决方案1】:

首先,使用findItemslistWidget中查找项目:

items_list = dialog.listWidget.findItems(itemName,Qt.MatchExactly)

这将返回与itemName 匹配的QListWidgetItem 列表(如果只有一项与itemName 匹配,则应该是一项列表)

其次,致电dialog.listWidget.row() 查找您找到的项目的行号。

最后,使用dialog.listWidget.takeItem()删除那个/那些项目

所以最后你的函数看起来像这样:

def deleteItem(itemName):
     items_list = dialog.listWidget.findItems(itemName,QtCore.Qt.MatchExactly)
     for item in items_list:
         r = dialog.listWidget.row(item)
         dialog.listWidget.takeItem(r)

同样,您必须确保没有同名的项目,否则它们将被一起删除。

【讨论】:

  • items_list = listWidget.findItems(itemName,QtCore.MatchExactly) AttributeError: 'module' object has no attribute 'MatchExactly' 有这个错误,我使用了 QtCore,因为它似乎 MatchExactlyt 在 QtCore 类中,我没有找到 Qt 模块...还是我导入了错误的东西?
  • 哦,就是这样,QtCore.Qt.MatchExactly。似乎正在工作!谢谢
  • @Nix...是的..这取决于您如何导入 PyQt 模块...我已经更新了我的答案...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多