2016-08-09 52 views
-1

我想創建一個像SublimeText中一樣支持多光標編輯的小QScintilla小部件。據我所知Scintilla已經支持多個遊標,但我沒有看到任何例子。使用QScintilla進行多光標編輯

那麼,任何人都可以請一個小示例顯示與QScintilla多個遊標的基礎?

+0

爲什麼不嘗試自己創建一個示例,並將其添加到您的問題?然後,您可以解釋您實際代碼中哪些特定部分有問題。 – ekhumoro

+0

@ekhumoro當然,這是一個很好的起點,問題是我不知道哪些方法與我要求提供的QScintilla相關。換句話說,我可以在哪些文檔中找到這個? – BPL

回答

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調用包裝在自己的包裝中。

請記住,offset s以字節表示,因此取決於文本的編碼,或多或少被QScintilla的QStrings隱藏。另一方面,「行索引」以字符表示(如果使用unicode,則爲碼位),因此更可靠。

+0

非常感謝!爲了開始使用QScintilla模擬崇高的文本行爲,這個答案是一個非常好的起點。還有一個問題,當我使用標籤時,它有點正常。當我按下箭頭鍵或者我嘗試用shift鍵選擇單詞時,出現問題,在這種情況下,multicursors消失。任何解決方法? – BPL

+0

我不認爲有可能改變選擇,因爲你打算。也許你可以捕捉鍵盤事件並自己重新執行SETSELECTION/ADDSELECTION。這似乎並不理想,但我不確定還有其他方法。 –

+0

好吧,那是不重要的,我會接受你的回答,因爲這是一個很好的起點,謝謝你 – BPL