原控件是QPlainTextEdit
移植到了QTextEdit上
使用了借助光标位置进行补偿的方式,来保证滚动行数精确满足要求。
from PyQt5.QtCore import Qt, QRect, QSize, QPoint
from PyQt5.QtWidgets import QWidget, QPlainTextEdit, QTextEdit
from PyQt5.QtGui import QColor, QPainter, QTextFormat, QKeyEvent, QWheelEvent, QMouseEvent, QTextCursor
class QLineNumberArea(QWidget):
def __init__(self, editor):
super().__init__(editor)
self.codeEditor = editor
def sizeHint(self):
return QSize(self.editor.lineNumberAreaWidth(), 0)
def paintEvent(self, event):
print('paint!!!!!')
self.codeEditor.lineNumberAreaPaintEvent(event)
class QCodeEditor(QTextEdit):
def __init__(self, parent=None):
super().__init__(parent)
self.lineNumberArea = QLineNumberArea(self)
self.setText('aa\n' * 20)
self.document().blockCountChanged.connect(self.updateLineNumberAreaWidth)
self.document().cursorPositionChanged.connect(self.highlightCurrentLine)
self.verticalScrollBar().sliderMoved.connect(self.on_scroll)
# self.verticalScrollBar().sliderPressed.connect(self.on_scroll)
self.verticalScrollBar().sliderReleased.connect(self.on_scroll)
# self.verticalScrollBar(
# self.verticalScrollBar().sliderMoved.connect(self.on_scroll)
# self.verticalScrollBar().act
#
QTextEdit行号同步滚动

本文介绍了一种在PyQt5中使用QTextEdit组件时,如何实现行号区域与文本编辑区域同步滚动的方法。通过监听滚动事件并计算光标位置进行补偿,确保滚动行数精确对齐。此外,还实现了高亮当前行的功能。
最低0.47元/天 解锁文章
1352





