PyQt4:Qscintilla和水平滚动中的自动完成

时间:2014-04-20 13:58:55

标签: python autocomplete scroll pyqt4 qscintilla

如果自动完成阈值设置为1,我想在html文件的自动完成列表中显示所有属性和标签。我试过这段代码使用API​​我在新文件加载到mdi子文件后设置了这段代码(子窗口)但它不起作用:

lexer=Qsci.QsciLexerHTML()
api = Qsci.QsciAPIs(lexer)
## Add autocompletion strings
api.add("aLongString")
api.add("aLongerString")
api.add("aDifferentString")
api.add("sOmethingElse")
## Compile the api for use in the lexer
api.prepare()
self.activeMdiChild().setAutoCompletionSource(Qsci.QsciScintilla.AcsAPIs)
self.activeMdiChild().setLexer(lexer)

我的水平滚动条始终可见,我想将其设置为scrollbarasn​​eeded。请告诉我们如何完成这两项任务。

1 个答案:

答案 0 :(得分:2)

除了未设置auto-completion threshold之外,您的示例代码似乎没有任何问题。这是一个最小的工作示例:

from PyQt4 import QtGui, Qsci

class Window(Qsci.QsciScintilla):
    def __init__(self):
        Qsci.QsciScintilla.__init__(self)
        lexer = Qsci.QsciLexerHTML(self)
        api = Qsci.QsciAPIs(lexer)
        api.add('aLongString')
        api.add('aLongerString')
        api.add('aDifferentString')
        api.add('sOmethingElse')
        api.prepare()
        self.setAutoCompletionThreshold(1)
        self.setAutoCompletionSource(Qsci.QsciScintilla.AcsAPIs)
        self.setLexer(lexer)

if __name__ == "__main__":

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    app.exec_()

除非你愿意自己重新实现一切(这并不容易),否则无法真正解决滚动条所需的功能。底层的Scintilla控件不直接支持自动水平滚动条隐藏,因为它涉及可能非常昂贵的计算(即确定最长的行)。大多数使用Scintilla / Qscintilla的人都学会忍受永远存在的水平滚动条。