我做了 QLineEdit 来读取中缀数学表达式 . 运营商仅限于 +-*/ 和括号 . 值可以是数字或表示数值的变量名称 . 我想自动完成变量名称 .
QLineEdit
+-*/
问题是,显然简单 QComplete 仅适用于单个预定义的单词/短语 . 它们不能在其他单词之间起作用(正如您在修改表达式时所期望的那样) .
QComplete
我试过阅读Tree Model Completer,但是因为我用Python编程对我没有太大帮助 . 有谁知道在python中编码的简单树模型完成示例?
读完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'继续它 . 它看起来像:
所有工作都在 splitPath(path) QCompleter 中完成,每当我更改编辑字段的文本时,都会调用两次(?) . 在对文本进行一些处理之后,应该使用包含一个或多个提议的简单字符串列表来设置模型new . 似乎必须每次都重新设置模型 . 另见QCompleter Custom Completion Rules .
splitPath(path)
QCompleter
这还不是完整的公式解析和变量名称完成,但是朝着这个方向迈出了合理的一步 . 它只是解释了 QCompleter 如何用于该目标 . 总结一下:子类 QCompleter 并将所有自定义逻辑放入 splitpath() .
splitpath()
1 回答
读完ekhumoros后comment我决定为自定义的完成者做一个简短的例子 .
这是一个例子:
每当文本以'ha'结尾时,它建议用'llo'继续它 . 它看起来像:
所有工作都在
splitPath(path)
QCompleter
中完成,每当我更改编辑字段的文本时,都会调用两次(?) . 在对文本进行一些处理之后,应该使用包含一个或多个提议的简单字符串列表来设置模型new . 似乎必须每次都重新设置模型 . 另见QCompleter Custom Completion Rules .这还不是完整的公式解析和变量名称完成,但是朝着这个方向迈出了合理的一步 . 它只是解释了
QCompleter
如何用于该目标 . 总结一下:子类QCompleter
并将所有自定义逻辑放入splitpath()
.