2016-08-09 56 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