Tkinter:Text小部件的语法高亮显示

时间:2016-07-26 16:13:22

标签: python text syntax tkinter

有人可以解释如何将语法高亮添加到Tkinter Text小部件吗?

每次程序找到匹配的单词时,它会将该单词的颜色设置为我想要的颜色。例如:将单词tkinter标记为粉红色,将in标记为蓝色。但是当我输入Tkinter时,它会以黄色显示Tk--ter,将蓝色显示为in

我该如何解决这个问题?谢谢!

4 个答案:

答案 0 :(得分:1)

使用tags。我将实施那里给出的概念。

示例:

import tkinter as tk

root = tk.Tk()
root.title("Begueradj")
text = tk.Text(root)
# Insert some text
text.insert(tk.INSERT, "Security ")
text.insert(tk.END, " Pentesting ")
text.insert(tk.END, "Hacking ")
text.insert(tk.END, "Coding")
text.pack()
# Create some tags
text.tag_add("one", "1.0", "1.8")
text.tag_add("two", "1.10", "1.20")
text.tag_add("three", "1.21", "1.28")
text.tag_add("four", "1.29", "1.36")
#Configure the tags
text.tag_config("one", background="yellow", foreground="blue")
text.tag_config("two", background="black", foreground="green")
text.tag_config("three", background="blue", foreground="yellow")
text.tag_config("four", background="red", foreground="black")
#Start the program
root.mainloop()

<强>演示:

enter image description here

答案 1 :(得分:1)

这是 igwd's answer 的后续。 idlelib.colorizer.ColorDelegatoridlelib.percolator.Percolator 似乎没有很好的记录,所以我决定发布我发现的内容。

如果您想突出显示诸如“tkinter”和“in”之类的词,您可能需要普通的 Python 语法突出显示和一些附加内容。

import idlelib.colorizer as ic
import idlelib.percolator as ip
import re
import tkinter as tk

root = tk.Tk()
root.title('Python Syntax Highlighting')

text = tk.Text(root)
text.pack()

cdg = ic.ColorDelegator()
cdg.prog = re.compile(r'\b(?P<MYGROUP>tkinter)\b|' + ic.make_pat(), re.S)
cdg.idprog = re.compile(r'\s+(\w+)', re.S)

cdg.tagdefs['MYGROUP'] = {'foreground': '#7F7F7F', 'background': '#FFFFFF'}

# These five lines are optional. If omitted, default colours are used.
cdg.tagdefs['COMMENT'] = {'foreground': '#FF0000', 'background': '#FFFFFF'}
cdg.tagdefs['KEYWORD'] = {'foreground': '#007F00', 'background': '#FFFFFF'}
cdg.tagdefs['BUILTIN'] = {'foreground': '#7F7F00', 'background': '#FFFFFF'}
cdg.tagdefs['STRING'] = {'foreground': '#7F3F00', 'background': '#FFFFFF'}
cdg.tagdefs['DEFINITION'] = {'foreground': '#007F7F', 'background': '#FFFFFF'}

ip.Percolator(text).insertfilter(cdg)

root.mainloop()

Example Output

答案 2 :(得分:0)

您可以使用tag执行此操作。您可以将标记配置为具有特定背景,字体,文本大小,颜色等。然后将这些标记添加到要配置的文本中。

所有这些都在documentation

答案 3 :(得分:0)

这些代码可以在IDLE中实现语法高亮。 您可以复制源代码并修改某些内容。

import tkinter as tk
from idlelib.percolator import Percolator
from idlelib.colorizer import ColorDelegato
main = tk.Tk()
text = tk.Text(main)
text.pack()
Percolator(text).insertfilter(ColorDelegator())
main.mainloop()