[英]How to filter QListWidget with a QLineEdit?
我嘗試在 python 中為我正在處理的一個小項目構建這個示例: Qt QListWidget With Filter 。 但我很難理解。 我從我的文件夾中創建了一個所有文件的列表,並想用我在 lineedit 中編寫的文本對其進行過濾,就像實時搜索一樣。
import GUI_update_v8
from PyQt5 import QtGui, QtCore, QtWidgets
import sys
import os
class MyFileBrowser(GUI_update_v8.Ui_MainWindow, QtWidgets.QMainWindow):
def __init__(self):
super(MyFileBrowser,self).__init__()
self.setupUi(self)
self.treeView.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.treeView.customContextMenuRequested.connect(self.context_menu)
self.listWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.listWidget.customContextMenuRequested.connect(self.context_menu1)
self.populate()
def populate(self):
"""Verzeichnisübersicht Rechte Seite"""
global path
path =("T:\\Documentation")
self.model = QtWidgets.QFileSystemModel()
self.model.setRootPath((QtCore.QDir.rootPath()))
global proxymodel
proxymodel = QtCore.QSortFilterProxyModel(recursiveFilteringEnabled=True)
proxymodel.setSourceModel(self.model)
proxymodel.sort(0, QtCore.Qt.AscendingOrder)
self.treeView.setModel(proxymodel)
self.treeView.setRootIndex(proxymodel.mapFromSource(self.model.index(path)))
self.treeView.setColumnWidth(0,350)
x = [i[2] for i in os.walk('T:\\Documentation')]
y=[]
for t in x:
for f in t:
y.append(f)
self.listWidget.addItems(y)
self.listWidget.sortItems()
self.lineEdit.setPlaceholderText("Search here")
def Change():
s = QtWidgets.QLineEdit()
suche = s.text()
e = QtCore.QRegularExpression(suche)
q = self.listWidget.findItems(filter(e))
self.listWidget.clear()
self.listWidget.addItems(filterlist)
self.lineEdit.textChanged.connect(Change)
if __name__ =="__main__":
app = QtWidgets.QApplication([])
fb = MyFileBrowser()
fb.show()
app.exec_()
我得到一個錯誤: filter expects 2 arguments, got 1
。
當您嘗試將示例從一種語言翻譯成另一種語言時,不要成為復制和粘貼機器,但您必須分析代碼,因為並非所有函數都必然存在或具有相同的名稱。 視頻的邏輯是創建一個包含所有選項的基本列表,然后根據正則表達式進行過濾
def populate(self):
path = 'T:\\Documentation'
self.model = QtWidgets.QFileSystemModel()
self.model.setRootPath((QtCore.QDir.rootPath()))
proxymodel = QtCore.QSortFilterProxyModel(recursiveFilteringEnabled=True)
proxymodel.setSourceModel(self.model)
proxymodel.sort(0, QtCore.Qt.AscendingOrder)
self.treeView.setModel(proxymodel)
self.treeView.setRootIndex(proxymodel.mapFromSource(self.model.index(path)))
self.treeView.setColumnWidth(0, 350)
self.files = []
for _, _, files in os.walk(path):
self.files.extend(files)
self.listWidget.addItems(self.files)
self.listWidget.sortItems()
self.lineEdit.setPlaceholderText("Search here")
self.lineEdit.textChanged.connect(self.change)
def change(self, text):
self.listWidget.clear()
e = QtCore.QRegularExpression(text)
filter_files = [f for f in self.files if e.match(f).hasMatch()]
self.listWidget.addItems(filter_files)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.