2016-08-09 9 views
-1

Я хотел бы создать небольшой виджет QScintilla, поддерживающий редактирование нескольких курсоров, как в SublimeText. Насколько я знаю, Scintilla уже поддерживает несколько курсоров, но я не видел никакого примера.Редактирование нескольких курсоров с QScintilla

Итак, может ли кто-нибудь отправить небольшой пример, демонстрирующий основы нескольких курсоров с QScintilla?

+0

Почему бы не попробовать создать пример самостоятельно и добавить его в свой вопрос? Затем вы можете объяснить, с какими конкретными частями * фактического кода * вы испытываете трудности. – ekhumoro

+0

@ekhumoro Конечно, это была бы хорошая отправная точка, проблема в том, что я не знаю, какие методы связаны с тем, что я прошу, это предоставление QScintilla. Сказано иначе, в какой части документации я могу найти это? – BPL

ответ

1

Функция Multi-cursor доступна в 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 в свои собственные обертки.

Помните, что offset s выражены в байтах и, следовательно, зависят от кодировки текста, который более или менее скрыт QString QScintilla. С другой стороны, «индекс строки» выражается в символах (кодовые точки при использовании юникода) и, следовательно, более надежны.

+0

Большое спасибо! этот ответ является очень хорошей отправной точкой, чтобы начать эмулировать возвышенное текстовое поведение с помощью QScintilla. Еще один вопрос, хотя, когда я использую вкладки, он работает нормально. Проблема появляется, когда я нажимаю клавиши со стрелками, или я пытаюсь выбрать слова, используя shift, в этом случае мультикурсоры исчезают. Любое обходное решение для этого? – BPL

+0

Я не думаю, что можно изменить выбор, как вы его намереваетесь. Возможно, вы можете поймать клавиатурные события и самостоятельно выполнить настройку SETSELECTION/ADDSELECTION. Это кажется субоптимальным, но я не уверен, что есть другой способ. –

+0

Хорошо, это было оффтопным, я согласен с вашим ответом, потому что это хорошая отправная точка для прокатки, спасибо – BPL

Смежные вопросы