Есть ли способ очистить все, кроме 1 конкретной строки в QListWİdget - PullRequest
1 голос
/ 30 марта 2019

Существует два типа рядов: один - «Пицца», а другой - «Клиент».

def addClient(self):
    self.listWidget.clear()
    self.listWidget.addItem("client")

Когда новая строка «Клиент» добавлена, я могу очистить все остальные строки, но когда я добавляю другого Клиента, моя первая строка клиента тоже удаляется, и я хочу, чтобы первый клиент не зависел от функции очистки. Пример строк;

-Client(first)
-Pizza
-Pizza

Когда я добавляю нового клиента;

-Client(first)
-Client(second)

Когда я добавляю пару рядов пиццы;

-Client(first)
-Client(second)
-Pizza
-Pizza

Наконец, когда я добавляю другого клиента,

-Client(first)
-Client(second)
-Client(third)

Как я ясно показал, я хочу сохранить все строки клиента, когда я использую функцию очистки, и очистить все остальные строки.

1 Ответ

2 голосов
/ 30 марта 2019

Вам не нужно использовать clear(), вам нужно отфильтровать элементы с надписью «Пицца» и удалить их один за другим из QListWidget:

from PyQt5 import QtCore, QtWidgets

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        self.list_widget = QtWidgets.QListWidget()
        client_btn = QtWidgets.QPushButton("add client")
        client_btn.clicked.connect(self.add_client)
        pizza_btn = QtWidgets.QPushButton("add pizza")
        pizza_btn.clicked.connect(self.add_pizza)

        grid = QtWidgets.QGridLayout(self)
        grid.addWidget(self.list_widget, 0, 0, 1, 2)
        grid.addWidget(client_btn, 1, 0)
        grid.addWidget(pizza_btn, 1, 1)

    @QtCore.pyqtSlot()
    def add_client(self):
        client_items = self.list_widget.findItems(
            "Pizza",
            QtCore.Qt.MatchExactly
        ) 
        for item in reversed(client_items):
            row = self.list_widget.row(item)
            it = self.list_widget.takeItem(row)
            del it
        self.list_widget.addItem("Client")

    @QtCore.pyqtSlot()
    def add_pizza(self):
        self.list_widget.addItem("Pizza")

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())
...