1

でオートコンプリーターを複数回使用できるようにしたいのですが、使用QLineEdit例を見つけましたが、QTextEditが見つかりません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、カンマを追加すると、コンプリーターが同じ単語の「予測を開始」するようにします。ありがとう。

4

3 に答える 3

5

それが他の人を助けることができるなら、私は答えを見つけました、私は Completer のクラスを作成しました:

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)
于 2016-03-29T23:01:19.417 に答える