2015-12-29 69 views
0

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

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

这是我这么远,明明喂养字符串indexFromItem是不工作...

+0

so'inventoryList'' listWidget'以及? –

+0

对不起,我正在用通用的替换我自己的变量,并忘记替换它们。修复了问题。 – Nix

回答

0

首先,使用findItems查找项listWidget

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

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

其次,请致电dialog.listWidget.row()查找找到的物品的行号。

最后,detele那/使用dialog.listWidget.takeItem()

所以在最后的项目(S),你的作用是这样的:

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) 

同样,你必须确保没有任何物品与相同的名称,否则他们将一起被删除。

+0

的MULTILINE_ACL_COMPONENT = listWidget.findItems(ITEMNAME,QtCore.MatchExactly) AttributeError的:“模块”对象没有属性“MatchExactly” 有这种错误,我用QtCore因为它看起来像MatchExactlyt处于QtCore类,我也没有找到Qt模块...或者我输入了错误的东西? – Nix

+0

哦,它是QtCore.Qt.MatchExactly。似乎工作!谢谢 – Nix

+0

@Nix ...是的,这取决于你如何导入PyQt模块...我已经更新了我的答案... –