0

私は自分のプロジェクトでこのクラスを実装しました:

class ScriptEditorTextBox(QsciScintilla):

def __init__(self, parent):
    QsciScintilla.__init__(self)

    #Lexer
    lexer = QsciLexerPython()

    #AutoCompletion
    api = Qsci.QsciAPIs(lexer)
    api.add('aLongString')
    api.add('aLongerString')
    api.add('aDifferentString')
    api.add('sOmethingElse')
    api.prepare()

    self.setLexer(lexer)
    self.setAutoCompletionThreshold(1)
    self.setAutoCompletionSource(QsciScintilla.AcsAPIs)

    #LineHighlight
    self.setCaretLineVisible(True)
    self.setCaretLineBackgroundColor(QColor("gainsboro"))

    #AutoIndentation
    self.setAutoIndent(True)
    self.setIndentationGuides(True)
    self.setIndentationsUseTabs(True)
    self.setIndentationWidth(4)

    #Margins
    self.setMarginsBackgroundColor(QColor("gainsboro"))
    self.setMarginsFont(QFont("Consolas", 9, 87)) 
    self.setMarginLineNumbers(1, True)
    self.setMarginLineNumbers(2, False)
    self.setMarginWidth(1, QString().setNum(10))
    self.setMarginWidth(2, 10)
    self.connect(self, SIGNAL("linesChanged()"), self._linesChanged)

def _linesChanged(self):
    width = QString().setNum(self.lines() * 10)
    self.setMarginWidth(1, width)

すべてが正常に開始されますが、後でEnterキーを押すと、自動インデントされません。また、オートコンプリートもありません(ただし、何をオートコンプリートする必要があるかさえわかりません)。

どんな提案にもとても感謝しています。

4

1 に答える 1

1

どちらの問題も、レクサーへの適切な参照を維持できないことが原因です。

これを行うと、サンプルコードが機能します。

    lexer = QsciLexerPython(self)

またはこれ:

    self.lexer = QsciLexerPython()
    ...
    api = Qsci.QsciAPIs(self.lexer)
    ...
    self.setLexer(self.lexer)
于 2015-02-27T21:47:30.563 に答える