在pyqt5中具有两个行编辑的自定义QCompleter

2024-05-19 11:04:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现某种具有特定完成规则的定制qcompleter。基本上,对于列表中的多个单词,我希望它根据所有单词的前缀给出建议,而不仅仅是第一个单词。然后,当用户用建议填充第一行编辑时,我希望它将第一个单词放在第一行编辑中,然后将其余单词放在第二行编辑中。你知道吗

例如,我的列表包含条目“pizza chikin chikin”。当用户在第一行编辑中键入'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_())

Tags: 字符串用户self编辑ch单词建议pizza

热门问题