使用 QScintilla 和 PyQt 的自动完成建议中没有 python 个关键字
no python keywords in autocomplete suggestions using QScintilla and PyQt
我期待 Python 关键字(即 for, range, lambda
)的自动完成建议,并希望在设置时获得标准库模块和函数(即 sys, os.path
等)的自动完成建议api 与 QsciLexerPython 词法分析器,但在下面的代码示例中,从 this website 压缩和更新,唯一发生的自动完成是添加到列表中的四个字符串。
我是不是做错了什么,如果是,我如何让 python 关键字在自动完成中注册? (当然是我的主要问题)
如果这是预期的行为,词法分析器在自动完成中扮演什么角色,为什么词法分析器中的关键字没有分配给本例中的自动完成列表?
最后,是否可以在自动完成中包含 python 个标准库模块和子模块,这需要什么?
"""Base code originally from: http://kib2.free.fr/tutos/PyQt4/QScintilla2.html"""
import sys
from PyQt5 import QtWidgets, Qsci
app = QtWidgets.QApplication(sys.argv)
editor = Qsci.QsciScintilla()
lexer = Qsci.QsciLexerPython()
editor.setLexer(lexer)
## setup autocompletion
api = Qsci.QsciAPIs(lexer)
api.add("aLongString")
api.add("aLongerString")
api.add("aDifferentString")
api.add("sOmethingElse")
api.prepare()
editor.setAutoCompletionThreshold(1)
editor.setAutoCompletionSource(Qsci.QsciScintilla.AcsAPIs)
editor.show()
editor.setText(open(sys.argv[0]).read())
sys.exit(app.exec_())
qscintilla不知道python的关键字,也不知道库的关键字,QsciAPIs希望大家提供信息,下面我会展示一些return关键字和函数名的函数标准库。 qscintilla 只会自动完成你提供的单词,如果你想要智能自动完成,我建议你做一个识别点或括号的逻辑,并过滤你提供给 QsciAPIs 的单词。
import sys
from PyQt5 import QtWidgets, Qsci
import keyword
import pkgutil
app = QtWidgets.QApplication(sys.argv)
editor = Qsci.QsciScintilla()
lexer = Qsci.QsciLexerPython()
editor.setLexer(lexer)
## setup autocompletion
api = Qsci.QsciAPIs(lexer)
for key in keyword.kwlist + dir(__builtins__):
api.add(key)
for importer, name, ispkg in pkgutil.iter_modules():
api.add(name)
api.prepare()
editor.setAutoCompletionThreshold(1)
editor.setAutoCompletionSource(Qsci.QsciScintilla.AcsAPIs)
editor.show()
editor.setText(open(sys.argv[0]).read())
sys.exit(app.exec_())
感谢 ekhumoro 指导我找到答案。 QsciAPIs class 有一个加载方法,PyQt 带有一组 api 文件。下面是按照我正在寻找的方式进行正确自动完成的代码:
"""Base code originally from: http://kib2.free.fr/tutos/PyQt4/QScintilla2.html"""
import sys
import os
import PyQt5
from PyQt5 import QtWidgets, Qsci
app = QtWidgets.QApplication(sys.argv)
editor = Qsci.QsciScintilla()
lexer = Qsci.QsciLexerPython(editor)
editor.setLexer(lexer)
## setup autocompletion
api = Qsci.QsciAPIs(lexer)
# import the desired api file
pyqt_path = os.path.dirname(PyQt5.__file__)
api.load(os.path.join(pyqt_path, "Qt/qsci/api/python/Python-3.6.api"))
api.prepare()
editor.setAutoCompletionThreshold(1)
editor.setAutoCompletionSource(Qsci.QsciScintilla.AcsAll)
editor.show()
editor.setText(open(sys.argv[0]).read())
sys.exit(app.exec_())
我期待 Python 关键字(即 for, range, lambda
)的自动完成建议,并希望在设置时获得标准库模块和函数(即 sys, os.path
等)的自动完成建议api 与 QsciLexerPython 词法分析器,但在下面的代码示例中,从 this website 压缩和更新,唯一发生的自动完成是添加到列表中的四个字符串。
我是不是做错了什么,如果是,我如何让 python 关键字在自动完成中注册? (当然是我的主要问题)
如果这是预期的行为,词法分析器在自动完成中扮演什么角色,为什么词法分析器中的关键字没有分配给本例中的自动完成列表?
最后,是否可以在自动完成中包含 python 个标准库模块和子模块,这需要什么?
"""Base code originally from: http://kib2.free.fr/tutos/PyQt4/QScintilla2.html"""
import sys
from PyQt5 import QtWidgets, Qsci
app = QtWidgets.QApplication(sys.argv)
editor = Qsci.QsciScintilla()
lexer = Qsci.QsciLexerPython()
editor.setLexer(lexer)
## setup autocompletion
api = Qsci.QsciAPIs(lexer)
api.add("aLongString")
api.add("aLongerString")
api.add("aDifferentString")
api.add("sOmethingElse")
api.prepare()
editor.setAutoCompletionThreshold(1)
editor.setAutoCompletionSource(Qsci.QsciScintilla.AcsAPIs)
editor.show()
editor.setText(open(sys.argv[0]).read())
sys.exit(app.exec_())
qscintilla不知道python的关键字,也不知道库的关键字,QsciAPIs希望大家提供信息,下面我会展示一些return关键字和函数名的函数标准库。 qscintilla 只会自动完成你提供的单词,如果你想要智能自动完成,我建议你做一个识别点或括号的逻辑,并过滤你提供给 QsciAPIs 的单词。
import sys
from PyQt5 import QtWidgets, Qsci
import keyword
import pkgutil
app = QtWidgets.QApplication(sys.argv)
editor = Qsci.QsciScintilla()
lexer = Qsci.QsciLexerPython()
editor.setLexer(lexer)
## setup autocompletion
api = Qsci.QsciAPIs(lexer)
for key in keyword.kwlist + dir(__builtins__):
api.add(key)
for importer, name, ispkg in pkgutil.iter_modules():
api.add(name)
api.prepare()
editor.setAutoCompletionThreshold(1)
editor.setAutoCompletionSource(Qsci.QsciScintilla.AcsAPIs)
editor.show()
editor.setText(open(sys.argv[0]).read())
sys.exit(app.exec_())
感谢 ekhumoro 指导我找到答案。 QsciAPIs class 有一个加载方法,PyQt 带有一组 api 文件。下面是按照我正在寻找的方式进行正确自动完成的代码:
"""Base code originally from: http://kib2.free.fr/tutos/PyQt4/QScintilla2.html"""
import sys
import os
import PyQt5
from PyQt5 import QtWidgets, Qsci
app = QtWidgets.QApplication(sys.argv)
editor = Qsci.QsciScintilla()
lexer = Qsci.QsciLexerPython(editor)
editor.setLexer(lexer)
## setup autocompletion
api = Qsci.QsciAPIs(lexer)
# import the desired api file
pyqt_path = os.path.dirname(PyQt5.__file__)
api.load(os.path.join(pyqt_path, "Qt/qsci/api/python/Python-3.6.api"))
api.prepare()
editor.setAutoCompletionThreshold(1)
editor.setAutoCompletionSource(Qsci.QsciScintilla.AcsAll)
editor.show()
editor.setText(open(sys.argv[0]).read())
sys.exit(app.exec_())