QLineEdit上的QCompleter用于插入文本的部分内容

时间:2015-01-21 13:54:21

标签: python qt pyqt qlineedit qcompleter

我用QLineEdit来读取中缀数学表达式。运算符仅限于+-*/和括号。值可以是数字或表示数值的变量名称。我想自动完成变量名称。

问题在于,显然简单的QComplete仅适用于单个预定义的单词/短语。它们在其他单词之间不起作用(正如您在修改表达式时所期望的那样)。

我试过阅读Tree Model Completer,但是因为我用Python编程对我没有太大帮助。有没有人知道用python编写的简单Tree Model Completer示例?

1 个答案:

答案 0 :(得分:3)

在阅读了ekhumoros comment后,我决定为自定义的完成者做一个简短的例子。

以下是示例:

from PySide import QtGui

class CustomCompleter(QtGui.QCompleter):

    def __init__(self):
        super().__init__()

    def splitPath(self, path):
        if path.endswith('ha'):
            self.setModel(QtGui.QStringListModel([path + 'llo']))
        return [path]

app = QtGui.QApplication([])

e = QtGui.QLineEdit()
c = CustomCompleter()
e.setCompleter(c)
e.show()

app.exec_()

每次文字结尾都是' ha'它建议继续使用' llo'。它看起来像:

enter image description here

所有工作都在splitPath(path) QCompleter完成,每当我更改编辑字段的文本时,都会调用两次(?)。在对文本进行一些处理之后,应该使用包含一个或多个提议的简单字符串列表来设置模型new。似乎必须每次都重新设置模型。另请参阅QCompleter Custom Completion Rules

这还不是完整的公式解析和变量名完成,但是朝着这个方向迈出了合理的一步。它只是解释了QCompleter如何用于该目标。总结:子类QCompleter并将所有自定义逻辑放入splitpath()