Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用QLineEdit筛选QListWidget?_Python_Pyqt5 - Fatal编程技术网

Python 如何使用QLineEdit筛选QListWidget?

Python 如何使用QLineEdit筛选QListWidget?,python,pyqt5,Python,Pyqt5,我尝试用python为我正在处理的一个小项目构建这个示例:。但我很难理解。我创建了一个文件夹中所有文件的列表,并希望使用我在lineedit中写入的文本对其进行过滤,就像实时搜索一样 import GUI_update_v8 from PyQt5 import QtGui, QtCore, QtWidgets import sys import os class MyFileBrowser(GUI_update_v8.Ui_MainWindow, QtWidgets.QMainWindow):

我尝试用python为我正在处理的一个小项目构建这个示例:。但我很难理解。我创建了一个文件夹中所有文件的列表,并希望使用我在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_()

我得到一个错误:
过滤器需要2个参数,得到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)

当您试图将示例从一种语言翻译成另一种语言时,不要做一台复制粘贴机,但您必须分析代码,因为并非所有函数都必须存在或具有相同的名称。视频的逻辑是创建一个包含所有选项的基本列表,然后根据正则表达式进行过滤

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)

这解决了我的问题。但是我不确定lineedit中的文本是如何进入过滤器的。我试图通过.text()方法获取它。这解决了我的问题。但是我不确定lineedit中的文本是如何进入过滤器的。我试图通过.text()方法获取它。