【发布时间】:2019-09-08 18:25:51
【问题描述】:
考虑这个sn-p:
import sys
from PyQt5.Qsci import QsciScintilla
from PyQt5.Qt import *
if __name__ == '__main__':
app = QApplication(sys.argv)
view = QsciScintilla()
# http://www.scintilla.org/ScintillaDoc.html#Folding
view.setFolding(QsciScintilla.BoxedTreeFoldStyle)
# view.setFolding(QsciScintilla.BoxedFoldStyle)
# view.setFolding(QsciScintilla.CircledFoldStyle)
# view.setFolding(QsciScintilla.CircledTreeFoldStyle)
# view.setFolding(QsciScintilla.NoFoldStyle)
# view.setFolding(QsciScintilla.PlainFoldStyle)
lines = [
(0, "def foo():"),
(1, " x = 10"),
(1, " y = 20"),
(1, " return x+y"),
(-1, ""),
(0, "def bar(x):"),
(1, " if x > 0:"),
(2, " print('this is')"),
(2, " print('branch1')"),
(1, " else:"),
(2, " print('and this')"),
(2, " print('is branch2')"),
(-1, ""),
(-1, ""),
(-1, ""),
(-1, "print('end')"),
]
view.setText("\n".join([b for a, b in lines]))
MASK = QsciScintilla.SC_FOLDLEVELNUMBERMASK
for i, tpl in enumerate(lines):
level, line = tpl
if level >= 0:
view.SendScintilla(view.SCI_SETFOLDLEVEL, i, level | QsciScintilla.SC_FOLDLEVELHEADERFLAG)
else:
view.SendScintilla(view.SCI_SETFOLDLEVEL, i, 0)
view.show()
app.exec_()
我想知道是否可以将折叠图标更改为不同于 QScintilla 提供的自定义图标,特别是我希望有一个类似于 Sublime 的向下箭头:
通过查看 QSciScintilla foldstyle,您会发现没有任何相似之处。
其实不仅如此,我还想知道是否有可能实现当鼠标位置进入/离开边缘区域时折叠图标消失的这种微妙的效果,看看:
这是一个非常棒的功能,这样您在编码时就不会被“始终可见”的折叠图标分心。
在这个thread 中似乎有一个叫做SC_MARK_ARROWDOWN 的东西,但不确定它是否可以用作折叠图标......无论如何,我仍然更喜欢我将使用的自定义图片一个 monokai 主题,我希望图标看起来像 Sublime 的一样优雅。
您会在下面找到我创建的 2 个 12x12 png 来表示深色和浅色箭头。
【问题讨论】:
-
第一个问题有一个简单的答案:在
view.setFolding(view.BoxedFoldStyle)之后添加view.SendScintilla(view.SCI_MARKERDEFINE, view.SC_MARKNUM_FOLDER, view.SC_MARK_ARROW)和view.SendScintilla(view.SCI_MARKERDEFINE, view.SC_MARKNUM_FOLDEROPEN, view.SC_MARK_ARROWDOWN)。可以使用SCI_MARKERDEFINERGBAIMAGE设置自定义图像。 WRT自动淡入淡出和高光,恐怕都需要手动完成。
标签: python pyqt5 scintilla qscintilla