引用:Search/Filter custom Widgets for QListWidget
https://stackoverflow.com/questions/53157962/search-filter-custom-widgets-for-qlistwidget
class MainWindow(QtWidgets.QDialog):
def __init__(self, data, parent=None):
super(MainWindow, self).__init__(parent)
self.data = data
self.ui = Ui_Main()
self.ui.setupUi(self)
self.ui.search_box.textChanged.connect(self.on_textChanged)
self.set_catalog_data()
def set_catalog_data(self):
for item in self.data:
# print(item)
metadata = MetadataForm(item)
lst_item = QtWidgets.QListWidgetItem()
self.ui.catalog_list_wid.insertItem(
self.ui.catalog_list_wid.count(),
lst_item
)
self.ui.catalog_list_wid.setItemWidget(lst_item, metadata)
lst_item.setSizeHint(metadata.sizeHint())
@QtCore.pyqtSlot(str)
def on_textChanged(self, text):
for row in range(self.ui.catalog_list_wid.count()):
it = self.ui.catalog_list_wid.item(row)
widget = self.ui.catalog_list_wid.itemWidget(it)
if text:
it.setHidden(not self.filter(text, widget.keywords))
else:
it.setHidden(False)
def filter(self, text, keywords):
# foo filter
# in the example the text must be in keywords
return text in keywords