2016-08-09 65 views
-1

Ich möchte ein kleines QScintilla-Widget erstellen, das Multi-Cursor-Bearbeitung wie in SublimeText unterstützt. Soweit ich weiß, unterstützt Scintilla bereits mehrere Cursor, aber ich habe dort kein Beispiel gesehen.Multi-Cursor-Bearbeitung mit QScintilla

Könnte also bitte jemand ein kleines Beispiel mit den Grundlagen mehrerer Cursor mit QScintilla posten?

+0

Warum nicht versuchen, selbst ein Beispiel zu erstellen und es zu Ihrer Frage hinzuzufügen? Dann können Sie erklären, mit welchen spezifischen Teilen des * tatsächlichen Codes * Sie Schwierigkeiten haben. – ekhumoro

+0

@ekhumoro Sicher, das wäre ein guter Ausgangspunkt, das Problem ist, ich weiß nicht, welche Methoden in Bezug auf das, was ich frage, gibt QScintilla. Anders gesagt, in welchem ​​Teil der Dokumentation kann ich das finden? – BPL

Antwort

1

Die Multi-Cursor-Funktion ist in Scintilla verfügbar, aber QScintilla bietet keine direkten Wrapper für diese Funktion. Sie können jedoch Ihre Wrapper "neu implementieren", da fast alles mit der Methode SendScintilla durchgeführt werden kann.

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_() 

Sie sollten die SendScintilla Anrufe in Ihre eigenen Wrapper wickeln.

Beachten Sie, dass die offset s in Bytes ausgedrückt werden und somit von der Codierung des Textes abhängen, die mehr oder weniger von QScintillas QStrings verdeckt wird. Andererseits wird der "Zeilenindex" in Zeichen ausgedrückt (Codepunkte bei Verwendung von Unicode) und sind daher zuverlässiger.

+0

Vielen Dank! Diese Antwort ist ein sehr guter Ausgangspunkt, um mit QScintilla das Verhalten von Text zu emulieren. Eine zusätzliche Frage, wenn ich Tabs verwende, funktioniert es irgendwie gut. Das Problem taucht auf, wenn ich die Pfeiltasten drücke oder ich versuche Wörter mit der Umschalttaste auszuwählen. In diesem Fall verschwinden die Mehrfachsucher. Irgendeine Abhilfe für dieses? – BPL

+0

Ich glaube nicht, dass es möglich ist, die Auswahl wie gewünscht zu ändern. Vielleicht können Sie Tastaturereignisse erfassen und SETSELECTION/ADDSELECTION selbst durchführen. Es scheint suboptimal, aber ich bin mir nicht sicher, ob es einen anderen Weg gibt. –

+0

Ok, das war offtopic, ich werde deine Antwort akzeptieren, denn es ist ein guter Ausgangspunkt, um ins Rollen zu kommen, danke – BPL