pyqt5中具有两个LineEdits的自定义QCompleter

时间:2019-07-09 16:37:26

标签: python pyqt5

我正在尝试使用特定的完成规则来实现某种自定义的qcompleter。基本上,对于我的列表中包含多个单词的条目,我希望它基于所有单词的前缀而不是第一个单词给出建议。然后,当用户用建议填写第一个lineEdit时,我希望它在第一个lineEdit中放入第一个单词,然后在第二个lineEdit中放入其余单词。

例如,我的列表包含条目“ pizza chikin chikin”。当用户在第一个lineEdit中键入“ ch”或“ pi”时,仍应建议使用整个字符串“ pizza chikin chikin”。当用户选择“ pizza chikin chikin”时,第一行应显示“ pizza”一词,然后在另一行中显示“ chikin chikin”。

到目前为止,我的完成者仅建议使用带有用户文本前缀的字符串。因此,如果我输入“ ch”,则只会建议以“ ch”开头的字符串,因此不会建议使用“ pizza chikin chikin”。但是一旦我输入“ pi”,系统就会提示

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QCompleter


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(439, 254)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(20, 90, 180, 25))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(240, 90, 180, 25))
        self.lineEdit_2.setObjectName("lineEdit_2")


        food = ["pizza chikin", "chikin pizza", "chikin pizza pizza", "chikin, pizza", "fried pizza"]

        completer = QCompleter(food)
        completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)

        self.lineEdit.setCompleter(completer)

        MainWindow.setCentralWidget(self.centralwidget)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:0)

过滤器模式属性

https://doc.qt.io/qt-5/qcompleter.html#filterMode-prop

是您要寻找的。将其设置为Qt.MatchContains