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" 循环来做同样的事情并避开全局变量,但这很简单并且对我有用。
我知道并且看到过只突出显示一个词的示例(例如 "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" 循环来做同样的事情并避开全局变量,但这很简单并且对我有用。