在某个字符后面标记一行中的所有内容[tkinter Text widget]

2024-04-19 06:00:23 发布

您现在位置:Python中文网/ 问答频道 /正文

作为一个编码挑战,我一直在构建一个富文本编辑器。到目前为止,我已经制作了工作保存/另存为/加载系统和工作头。但是,当您保存为.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():通过标签列出并删除所有标签。 基本上,如果您想更改fontsize(或使用特定绑定),只需在OptionMenu上选择。这个问题可能太含糊了,但是,我非常希望这样的方向或答案

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


Tags: httpstxtcom标题编码系统tag标签
1条回答
网友
1楼 · 发布于 2024-04-19 06:00:23

您可以使用文本小部件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)

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

相关问题 更多 >