Hello,

when I change the lexer multiple times in an editor session I have an issue with the margin font size. Changing the lexer a second time the size of the margin font is changed. Only a point size of 9 in the editor has not any visual effects in the margin or editing area. I am working with the Manjaro distribution. There I have an default size of 10 points in my login sessions. Can anyone confirm this behaviour in Qscintilla?

Gottfried

Here is my code:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
from PyQt5.QtGui import QFont
from PyQt5.Qsci import QsciScintilla, QsciLexerPython


class Editor(QsciScintilla):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.fontMono = QFont("Monospace")
        self.fontMono.setPointSizeF(7.0)
        #self.fontMono.setPointSizeF(9.0)
        #self.fontMono.setPointSizeF(12.0)
        self.setFont(self.fontMono)
        self.setMarginsFont(self.fontMono)
        self.setMargins(1)
        self.setMarginType(0, QsciScintilla.NumberMargin)
        self.setMarginWidth(0, "0000")

    def useLexer(self, lexer):
        if lexer is not None:
            lexer.setFont(self.fontMono)
            lexer.setDefaultFont(self.fontMono)
        self.setMarginsFont(self.fontMono)
        self.setFont(self.fontMono)
        self.setLexer(lexer)


class ApplWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        editor = Editor(parent=self)
        btn = QPushButton("Python", parent=self)
        layout = QVBoxLayout()
        layout.addWidget(btn)
        layout.addWidget(editor)
        self.setLayout(layout)
        with open(__file__, "r") as inp:
            text = inp.read()
        editor.append(text)
        editor.append(text)
        btn.pressed.connect(lambda: editor.useLexer(QsciLexerPython(parent=editor)))


def main():
    appl = QApplication(sys.argv)
    applWindow = ApplWindow()
    applWindow.show()
    return appl.exec_()


if __name__ == "__main__":
    main()

Reply via email to