繁体   English   中英

在某个字符后连续标记所有内容[tkinter文本小部件]

[英]Tag everything in a row after a certain character [tkinter Text widget]

作为编码方面的挑战,我一直在构建富文本编辑器。 到目前为止,我已经完成了保存/保存/加载系统和头文件的工作。 但是,当您另存为.txt时,所有标题数据都会丢失。 因此,我一直在考虑使用“#”标记标题(基本上是语法突出显示)(#-H1,##-H2,###-H3 ...)。 我环顾四周,却没有找到任何类似的东西。 到目前为止,我将其用作标题系统:

editor.tag_configure('heading7', font=heading7_font)
removeTags()
editor.tag_add('heading7', SEL_FIRST, SEL_LAST)

* heading7_font =(“ Consolas Bold”,16),removeTags():列出标签并删除所有标签。 基本上,如果您想更改字体大小(或使用特定的绑定),只需在OptionMenu上进行选择。 这个问题可能太含糊了,但是,我非常希望这样的方向或答案。

这是我整个项目的代码(是的,我知道我没有使用类,这是一个混乱的混乱局面,但是,我稍后再处理): https : //pastebin.com/wthVT6q4 (这里是样式表变量: https : //pastebin.com/WrX4EDKM

您可以使用文本窗口小部件search方法来搜索字符串或模式。 然后,只需将标签应用于结果即可。

这是如何在Text类中进行记录的:

search(self, pattern, index, stopindex=None, forwards=None, backwards=None, exact=None, regexp=None, nocase=None, count=None, elide=None)
    Search PATTERN beginning from INDEX until STOPINDEX.
    Return the index of the first character of a match or an
    empty string.

如您所见,可以使用search方法搜索正则表达式。 由于您并不总是知道匹配文本的长度,因此可以指定一个IntVar来获得匹配字符的数量。

例如,要搜索以##开头的行,您可以执行以下操作:

count_var = tk.IntVar()
index = editor.search(r'## .*', "1.0", "end", count=count_var, regexp=True)

这样,您可以使用index作为范围的开始,并使用"{} +{} chars".format(index, count_var.get())作为范围的结束。 或者,使用"{} lineend".format(index)"将突出显示添加到整行。

如果只想突出显示##之后的字符,则可以通过类似的方式调整index"{}+{}chars".format(index, 3)

注意:正则表达式语法必须遵循Tcl正则表达式规则 在概念上相同,它们在某些特殊字符类中与python的规则不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM