2016-02-25 4 views
0

Я хочу иметь возможность использовать несколько раз автозаполнение в моем QLineEdit, я нашел пример с помощью QTextEdit, но я не могу найти для QLineEdit. вот кусок кода, я использую (очень простой):PyQt - Auto Completer с QLineEdit несколько раз

from PyQt5.QtGui import * 
from PyQt5.QtCore import * 
from PyQt5.QtWidgets import * 
import sys 

def main():  
    app  = QApplication(sys.argv) 
    edit = QLineEdit() 
    strList = ["Germany", "Spain", "France", "Norway"] 
    completer = QCompleter(strList,edit) 

    edit.setCompleter(completer) 
    edit.show() 

    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

Например, я хочу завершившим «начать предсказывать» снова слова в том же QLineEdit, если добавить запятую. Спасибо.

ответ

1

Я нашел ответ, если это может помочь другим, я создал класс для завершающего:

class Completer(QtWidgets.QCompleter): 

    def __init__(self, parent=None): 
     super(Completer, self).__init__(parent) 

     self.setCaseSensitivity(Qt.CaseInsensitive) 
     self.setCompletionMode(QtWidgets.QCompleter.PopupCompletion) 
     self.setWrapAround(False) 

    # Add texts instead of replace 
    def pathFromIndex(self, index): 
     path = QtWidgets.QCompleter.pathFromIndex(self, index) 

     lst = str(self.widget().text()).split(',') 

     if len(lst) > 1: 
      path = '%s, %s' % (','.join(lst[:-1]), path) 

     return path 

    # Add operator to separate between texts 
    def splitPath(self, path): 
     path = str(path.split(',')[-1]).lstrip(' ') 
     return [path] 

И я использую его в классе для QLineEdit как:

class TextEdit(QtWidgets.QLineEdit): 

    def __init__(self, parent=None): 
     super(TextEdit, self).__init__(parent) 

     self.setPlaceholderText("example : ") 
     self._completer = Completer(self) 
     self.setCompleter(self._completer) 
Смежные вопросы