如何解决如何使用 QCheckBox 过滤 QListWidget 中的项目
如何在不区分大小写的情况下从 QLineEdit 过滤项目和 QCheckbox。 如果我使用下面的代码工作但无法获得 QCheckboxes 和项目。只能看到项目而不是复选框。 下面是我的示例代码:
from PyQt5 import QtCore,QtGui,QtWidgets
class Ui_Dialog(object):
def setupUi(self,Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(333,373)
self.gridLayout = QtWidgets.QGridLayout(Dialog)
self.gridLayout.setObjectName("gridLayout")
self.searchLineEdit = QtWidgets.QLineEdit(Dialog)
self.searchLineEdit.setObjectName("searchLineEdit")
self.gridLayout.addWidget(self.searchLineEdit,1,1)
self.label = QtWidgets.QLabel(Dialog)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label,1)
self.listWidget = QtWidgets.QListWidget(Dialog)
self.listWidget.setObjectName("listWidget")
self.gridLayout.addWidget(self.listWidget,2)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
fruit_list = ["Apples","pears","oranges","grapefruits","strawberries"]
self.fruit_list = dict.fromkeys(fruit_list,0)
for i in self.fruit_list:
item = QtWidgets.QListWidgetItem(i)
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
item.setCheckState(QtCore.Qt.Unchecked)
self.listWidget.addItem(item)
self.searchLineEdit.textChanged.connect(self.filter_items)
def retranslateUi(self,Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog","Dialog"))
self.label.setText(_translate("Dialog","Search"))
def filter_items(self,text):
self.listWidget.clear()
for item in self.fruit_list:
if text in item:
QtWidgets.QListWidgetItem(item,self.listWidget)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
解决方法
您不需要删除项目:只需隐藏它们
def filter_items(self,text):
for i in range(self.listWidget.count()):
item = self.listWidget.item(i)
item.setHidden(text not in item.text())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。