0

我想创建一个支持多光标编辑的小 QScintilla 小部件,就像在 SublimeText 中一样。据我所知,Scintilla 已经支持多个游标,但我还没有看到任何示例。

那么,任何人都可以发布一个小例子,展示使用 QScintilla 的多个游标的基础知识吗?

4

1 回答 1

1

多光标功能在 Scintilla 中可用,但 QScintilla 不提供此功能的直接包装器。但是,您可以“重新实现”您的包装器,因为几乎所有事情都可以使用该SendScintilla方法完成。

from PyQt5.Qsci import QsciScintilla
from PyQt5.QtWidgets import QApplication

app = QApplication([])

ed = QsciScintilla()

ed.setText('insert <-\nsome <-\ntext <-\n')
ed.show()

# typing should insert in all selections at the same time
ed.SendScintilla(ed.SCI_SETADDITIONALSELECTIONTYPING, 1)

# do multiple selections
offset = ed.positionFromLineIndex(0, 7) # line-index to offset
ed.SendScintilla(ed.SCI_SETSELECTION, offset, offset)
# using the same offset twice selects no characters, hence a cursor

offset = ed.positionFromLineIndex(1, 5)
ed.SendScintilla(ed.SCI_ADDSELECTION, offset, offset)

offset = ed.positionFromLineIndex(2, 5)
ed.SendScintilla(ed.SCI_ADDSELECTION, offset, offset)

app.exec_()

您应该将SendScintilla调用包装在自己的包装器中。

请记住,offsets 以字节表示,因此取决于文本的编码,这或多或少被 QScintilla 的 QStrings 隐藏。另一方面,“行索引”以字符表示(如果使用 unicode,则为代码点),因此更可靠。

于 2016-08-10T22:44:33.220 回答