Tkinter文字突出显示标记如:[B]和[\ B]

时间:2016-03-13 09:47:27

标签: python tkinter highlighting

我知道并且已经看过突出显示一个单词的例子(例如" print"),但我想知道我是否能够做类似的事情:

[B]Bold Text[\B]

我希望它在找到时开始使文字变为粗体:

 [B] 

并在找到时停止使文字变为粗体:

 [\B]

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

这可能会被标记为副本/副本,但我还没有找到任何回答如何突出显示的内容:

[B]

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

Post Scriptum:我也可以用标记突出显示从标记到结尾的下一个空格:

www. or http://

1 个答案:

答案 0 :(得分:2)

我这里没有按钮,但是这里是如何找到代码,将文本转换为粗体,并隐藏代码:

#!/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”循环和eschew全局变量做同样的事情,但这很容易,对我有用。