如何将字符偏移量转换为文本小部件的列行号位置?

How to convert character offset to Text widget's column line number position?

我有一个带有一些文本的文本小部件。在字符 424 到 478 的文本中,我想使用 tag_add().

更改其颜色

问题是tag_add() 需要以“6.15”格式定位,即第六行第十五字符。但是我不知道第 424 个字符之前有多少新行,也不知道计算确切列的剩余部分是多少。有没有一种方法可以将绝对字节偏移量转换为 line/column 索引?

如果您使用 insert() 添加文本,您可以指定在插入过程中使用的标签:

textw.tag_configure('red', background='red')

textw.insert(END, 'Some sample text ', (), 'with a bit of red', 'red', ' in the middle.')

结果:

此外,根据您的文本配置方式,您可以使用:

textw.tag_add('red', 1.424, 1.478)

文本小部件支持带索引的有限表达式语法。除此之外,您还可以从索引中添加和减去字符。例如,您可以使用 "1.0 + 100 chars"(或 "1.0+100c")表示 "line one, character zero, plus 100 characters"。

官方 python 文档强调对此进行记录,选择在此处推荐您参考官方 tcl/tk 文档:http://tcl.tk/man/tcl8.5/TkCmd/text.htm#M16

这也记录在 effbot 网站上:http://effbot.org/tkinterbook/text.htm(参见 "Expressions" 部分)