PyQt4 - Удалить виджет элемента из QListWidget - PullRequest
7 голосов
/ 20 сентября 2011

У меня есть QListWidget, и мне нужно удалить некоторые элементы.

Из того, что я исследовал, это вообще неприятная вещь.

Я прочитал тонну решений, но ни одно из них не применимо к моему конкретному сценарию.
На данный момент у меня есть только фактические виджеты предметов, с которыми приходится иметь дело; не их значения или индекс.

Это потому, что я получаю предметы (которые должны быть удалены) через .selectedItems().

Вот код:

ItemSelect = list(self.ListDialog.ContentList.selectedItems())

for x in range (0, len(ItemSelect)):
    print self.ListDialog.ContentList.removeItemWidget(ItemSelect[x])

Однако это ничего не делает.
Это не вызывает ошибку, но выбранные элементы не удаляются.
Методы, которые я видел для удаления элементов, требуют либо индекса, либо имени элемента, ни одного из которых у меня нет. У меня есть только фактические виджеты.

Как мне их удалить?

Я что-то упустил?

Я использую:

Python 2.7.1
PyQt4 IDLE 1.8
Windows 7

Ответы [ 3 ]

13 голосов
/ 20 сентября 2011

takeItem () должно работать:

for SelectedItem in self.ListDialog.ContentList.selectedItems():
    self.ListDialog.ContentList.takeItem(self.ListDialog.ContentList.row(SelectedItem))
5 голосов
/ 07 марта 2012

Удаление элемента из ListWidget:

item = self.listWidget.takeItem(self.listWidget.currentRow())
item = None
2 голосов
/ 20 сентября 2011

Странно, что нет прямого способа удалить элементы из QListWidget ... Попробуйте это:

listWidget = self.ListDialog.ContentList
model = listWidget.model()
for selectedItem in listWidget.selectedItems():
    qIndex = listWidget.indexFromItem(selectedItem)
    print 'removing : %s' %model.data(qIndex).toString()
    model.removeRow(qIndex.row())
...