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

2 投票
1 回答
878 浏览
提问于 2025-04-18 03:29

我想在HTML文件的自动完成列表中显示所有属性和标签,只要自动完成的阈值设置为1。我尝试了这段代码,使用了API,我把这段代码放在新打开的子窗口中,但它没有起作用:

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)

另外,我的水平滚动条一直可见,我想把它设置成需要时才出现的样子。请告诉我怎么完成这两个任务。

1 个回答

2

除了没有设置自动补全的阈值之外,你的示例代码似乎没有什么问题。这里有一个简单的可运行示例:

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的人都习惯了总是有一个水平滚动条在那儿。

撰写回答