Tkinter 文本高亮标记,如:[B] 和 [\B]

Tkinter Text Highlighting With Markers Like: [B] and [\B]

我知道并且看到过只突出显示一个词的示例(例如 "print"),但我想知道我是否能够执行以下操作:

[B]Bold Text[\B]

我希望它在定位时开始将文本加粗:

 [B] 

并在找到以下内容时停止将文本加粗:

 [\B]

我知道这在大多数论坛网站上都是这样,但我不知道这是否适用于 Python。 我记得在文本小部件的 EffBot 页面上看到表达式 "wordstart" 和 "wordend",我认为这可能是实现它的方法,但我真的不知道如何将它应用到我的代码中.

这可能会被标记为 copy/duplicate,但我还没有找到任何关于如何突出显示的答案,例如:

[B]

EffBot 页面:http://effbot.org/tkinterbook/text.htm

Post Scriptum:我也可以从标记突出显示到下一个 space 的结尾,例如:

www. or http://

我这里没有按钮,但这里是查找代码、将文本变为粗体并隐藏代码的方法:

#!/usr/bin/env python3
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
root = Tk()
tx = Text(root, background='white', font='Courier 12')
tx.grid(column=0, row=0, sticky=(N, W, E, S))
ybar = ttk.Scrollbar(root, orient=VERTICAL, command=tx.yview)
ybar.grid(column=1, row=0, sticky=(N, W, E, S))
xbar = ttk.Scrollbar(root, orient=HORIZONTAL, command=tx.xview)
xbar.grid(column=0, row=1, columnspan=2, sticky=(N, W, E, S))
tx["yscrollcommand"] = ybar.set
tx["xscrollcommand"] = xbar.set
tx.tag_config('hide', elide=1)
tx.tag_config('bold', font='Courier 12 bold')
lastplace=tx.index('1.0')
def boldit():
    global tx, lastplace
    nextplace = tx.search('[B]', lastplace, 'end')
    if nextplace:
        boldon = nextplace + ' +3c'
        tx.tag_add('hide', nextplace, boldon)
        boldoff = tx.search('[/B]', boldon, 'end')
        if boldoff:
            tx.tag_add('bold', boldon, boldoff) 
            codoff = boldoff + ' +4c'
            tx.tag_add('hide', boldoff, codoff)
        lastplace = codoff
        boldit()
    else:
        return
tx.insert('1.0', """When, in the course of [B]human events,[/B] it becomes [B]necessary[/B] for one people to [B]dissolve[/B] the political bands ...""")
boldit()        
root.mainloop()

您也许可以使用 "while" 循环来做同样的事情并避开全局变量,但这很简单并且对我有用。