Может ли Qcompleter поддерживать список двух разных слов? - PullRequest
0 голосов
/ 14 июля 2020
class MyCompleter(QCompleter):
    insertText = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        keywords_list = ['open browser', 'click', 'input text', 'contain', 'log', 'clear',
                         'clearcookies', 'doubleclick', 'scrol to view', 'should', 'reload',
                         'and', 'wait', 'children', 'right click', '.rightclick()', 'read file'
            , 'equal']
        crntDir = "D:\\log"
        image_list = []
        philes = os.listdir(crntDir)
        for phile in philes:
            if phile.endswith(".png"):
                image_list.append(phile)
        print(image_list)
        #image name in image_list
        QCompleter.__init__(self,keywords_list, parent)
        self.setCompletionMode(QCompleter.PopupCompletion)
        QCompleter.__init__(self,image_list, parent)
        self.highlighted.connect(self.setHighlighted)

    def setHighlighted(self, text):
        self.lastSelected = text

    def getSelected(self):
        return self.lastSelected

Я хочу показать два разных списка слов, keyword_list для простого полного слова, image_list - получить все имена изображений в назначенной папке. Если я ввожу имя изображения, то полностью покажу полное имя изображения *.png.

import sys
import os
import qdarkstyle
from PyQt5 import QtGui, QtCore,QtWidgets
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *

class MyListModel(QtCore.QAbstractListModel):
    def __init__(self, datain, parent=None, *args):
        QtCore.QAbstractListModel.__init__(self, parent, *args)
        self.listdata = datain

    def rowCount(self, parent=QtCore.QModelIndex()):
        return len(self.listdata)

    def data(self, index, role):
        s = QtCore.QSize(250, 200)
        if index.isValid() and role == QtCore.Qt.DecorationRole:
            return QtGui.QIcon(QtGui.QPixmap(self.listdata[index.row()]))
        if index.isValid() and role == QtCore.Qt.DisplayRole:
            # print(QtCore.QVariant(self.ListItemData[index.row()]['name']))
            return QtCore.QVariant(os.path.splitext(os.path.split(self.listdata[index.row()])[-1])[0])
        else:
            return QtCore.QVariant()

    def getItem(self, index):
        if index > -1 and index < len(self.ListItemData):
            return self.ListItemData[index]


class MyListView(QtWidgets.QListView):
    def __init__(self,parent=None):
        super(MyListView, self).__init__(parent)
        self.Listview = QListView()
        self.setViewMode(QtWidgets.QListView.IconMode)
        self.setIconSize(QtCore.QSize(90, 90))
        self.setGridSize(QtCore.QSize(110, 110))
        crntDir = "D:\\log"
        list_data = []
        image_list = []
        philes = os.listdir(crntDir)
        for phile in philes:
            if phile.endswith(".png"):
            list_data.append(os.path.join(crntDir, phile))
            image_list.append(phile)
        self.List_data = list_data
        lm = MyListModel(list_data)
        self.setModel(lm)
        self.show()
        self.clicked.connect(self.onclicked)

    def onclicked(self,item):
        image_selected_path = self.List_data[item.row()]
        print(image_selected_path)
        self.close()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MyListView()
    window.setWindowOpacity(0.9)
    window.show()
    window.raise_()
    sys.exit(app.exec_())

Я хочу, чтобы в этом окне отображалось совпадающее имя изображения. Как объединить эти две функции

...