Python 是否有办法清除QListWİ中除1个特定行以外的所有行;dget

Python 是否有办法清除QListWİ中除1个特定行以外的所有行;dget,python,python-3.x,pyqt,pyqt5,qlistwidget,Python,Python 3.x,Pyqt,Pyqt5,Qlistwidget,有两种类型的行,一种是Pizza,另一种是Client def addClient(self): self.listWidget.clear() self.listWidget.addItem("client") 当添加新行“客户端”时,我可以清除所有其他行,但当我添加另一个客户端时,我的第一个客户端行也将被删除,我希望第一个客户端不受清除功能的影响 -Client(first) -Pizza -Pizza 当我添加新客户端时 -Client(first) -Client(s

有两种类型的行,一种是Pizza,另一种是Client

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)

正如我清楚地表明的,我希望在使用clear函数时保留每个客户端行,并清除任何其他行。

您不必使用
clear()
,您需要做的是过滤以“Pizza”为文本的项目,并从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_())

我不明白你的意思,你想如何消除除一行以外的所有行?如何识别是行?我正在添加两种类型的行,一种是pizza,另一种是client,我不希望删除客户端类型。您可以提供a以更好地理解您。我看到您已编辑了问题,但未提供MCVE,如果是,则您的问题将被关闭。我想我理解您,您希望每次添加带有文本“Client”的项目时,带有文本“Pizza”的项目都会被删除。我说得对吗?