Автозаполнение с любой позиции в python

У меня есть требование, когда мне нужно показать результаты автозаполнения в виджете pyqt QLineEdit на основе введенного текста в любой позиции. Пока я могу сделать это с начала текста

Например: "Привет, я Слим Шейди", здесь я могу видеть весь текст в автозаполнении, когда набираю "Привет", но мне нужна функциональность, которая позволит мне поиск между или из любой позиции предложения.

Мой код: -

from PySide import QtCore, QtGui

class AutoCompleteEdit(QtGui.QLineEdit):
    def __init__(self, model, separator = ' ', addSpaceAfterCompleting = True):
        super(AutoCompleteEdit, self).__init__()
        self._separator = separator
        self._addSpaceAfterCompleting = addSpaceAfterCompleting
        self._completer = QtGui.QCompleter(model)
        self._completer.setWidget(self)
        self.connect(
                self._completer,
                QtCore.SIGNAL('activated(QString)'),
                self._insertCompletion)
        self._keysToIgnore = [QtCore.Qt.Key_Enter,
                              QtCore.Qt.Key_Return,
                              QtCore.Qt.Key_Escape,
                              QtCore.Qt.Key_Tab]

    def _insertCompletion(self, completion):
        """
        This is the event handler for the QCompleter.activated(QString) signal,
        it is called when the user selects an item in the completer popup.
        """
        extra = len(completion) - len(self._completer.completionPrefix())
        extra_text = completion[-extra:]
        if self._addSpaceAfterCompleting:
            extra_text += ' '
        self.setText(self.text() + extra_text)

    def textUnderCursor(self):
        text = self.text()
        textUnderCursor = ''
        i = self.cursorPosition() - 1
        while i >=0 and text[i] != self._separator:
            textUnderCursor = text[i] + textUnderCursor
            i -= 1
        return textUnderCursor

    def keyPressEvent(self, event):
        if self._completer.popup().isVisible():
            if event.key() in self._keysToIgnore:
                event.ignore()
                return
        super(AutoCompleteEdit, self).keyPressEvent(event)
        completionPrefix = self.textUnderCursor()
        if completionPrefix != self._completer.completionPrefix():
            self._updateCompleterPopupItems(completionPrefix)
        if len(event.text()) > 0 and len(completionPrefix) > 0:
            self._completer.complete()
        if len(completionPrefix) == 0:
            self._completer.popup().hide()


    def _updateCompleterPopupItems(self, completionPrefix):
        """
        Filters the completer's popup items to only show items
        with the given prefix.
        """
        self._completer.setCompletionPrefix(completionPrefix)
        self._completer.popup().setCurrentIndex(
                self._completer.completionModel().index(0,0))

if __name__ == '__main__':
    def demo():
        import sys
        app = QtGui.QApplication(sys.argv)
        values = ['@call', '@bug', '+qtodotxt', '+sqlvisualizer', 'Hi, I am Slim shady']
        editor = AutoCompleteEdit(values)
        window = QtGui.QWidget()
        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(editor)
        window.setLayout(hbox)
        window.show()

        sys.exit(app.exec_())

    demo()

person Pawankumar Dubey    schedule 17.11.2016    source источник
comment
Я сделал почти тот же QCompleter, но разделение каждого слова запятой снова активирует автозаполнение: вы можете увидеть мой пример здесь, вы можете заменить запятую пробелом в вашем примере.   -  person SyedElec    schedule 17.11.2016
comment
Ваш вопрос очень неясен. Что именно означает поиск между или из любой позиции предложения? Пожалуйста, приведите более наглядные примеры.   -  person ekhumoro    schedule 17.11.2016
comment
@ekhumoro, насколько я понял, ему нужно, чтобы завершающий элемент снова был активен, когда начинается новое слово в предложении.   -  person SyedElec    schedule 17.11.2016
comment
@Даркос. Я так не думаю, потому что пример уже делает это. Возможно, OP хочет выполнить автозаполнение, например. Slim, а не просто Hi, но это вообще не понятно.   -  person ekhumoro    schedule 17.11.2016
comment
Я постараюсь улучшить вопрос более подробно. Сейчас работаю над другим решением. :( спасибо за комментарии   -  person Pawankumar Dubey    schedule 18.11.2016