[PyQt] QsciScintilla Lexer disappears?

Phil Thompson phil at riverbankcomputing.com
Mon Apr 22 05:57:30 BST 2013


On Mon, 22 Apr 2013 05:21:25 +0430, Lee Harr <missive at hotmail.com> wrote:
> I am trying to use QsciScintilla in a project but I am having some
trouble
> with the Lexer. I don't understand why this code shows the lexer at
> the end of __init__ but when clicking in the margin it shows None.
> 
> Any thoughts?
> 
> 
> 
> import sys
> from PyQt4.QtCore import SIGNAL
> from PyQt4.QtGui import QApplication
> from PyQt4.Qsci import QsciScintilla, QsciLexerPython
> 
> 
> class SimplePythonEditor(QsciScintilla):
>     def __init__(self, parent=None):
>         super(SimplePythonEditor, self).__init__(parent)
> 
>         self.setMarginSensitivity(1, True)
>         self.connect(self,
>             SIGNAL('marginClicked(int, int, Qt::KeyboardModifiers)'),
>             self.on_margin_clicked)
> 
>         lexer = QsciLexerPython()
>         self.setLexer(lexer)
>         print self.lexer()
> 
>     def on_margin_clicked(self, nmargin, nline, modifiers):
>         print self.lexer()
> 
> 
> if __name__ == "__main__":
>     app = QApplication(sys.argv)
>     editor = SimplePythonEditor()
>     editor.show()
>     app.exec_() 		 	   		  

Because setLexer() doesn't keep a reference to the lexer. Either give the
lexer a parent or keep an explicit reference.

Phil


More information about the PyQt mailing list