如何在pythontkinter中设置*、#等符号的自定义颜色

人气:453 发布:2022-10-16 标签: python set symbols tkinter

问题描述

如何为、#等某些符号设置特定颜色‘ 例如,如果我键入";";,则其颜色应为蓝色,而其他颜色保持不变。

TypeDecker先生,我绑定您的功能是这样的,但这不起作用


from tkinter import*
root = Tk()
def check_for_symbols(symbol_dict) :
    for i in symbol_dict :
        text.tag_remove(i, '1.0', END)
        
        pos = 1.0
        while 1:
            pos = text.search(i, pos, regexp = True, stopindex = END)
            if not pos:
                break
            last_pos = '%s+%dc' % (pos, len(i)) # The only change
            text.tag_add(i, pos, last_pos)
            pos = last_pos
        text.tag_config(i, foreground = symbol_dict[i])
    root.after(1000, lambda:check_for_symbols(symbol_dict))
    return
symbol_dict = {
    "*":"blue"
}
text = Text(root, background = "gray19", foreground = "white", insertbackground = 'white',font="Consolas 15 italic")
text.pack(expand=True,fill=BOTH)
root.after(1000, lambda : check_for_symbols(symbol_dict))
root.mainloop()

推荐答案

可以遵循与单词hereby Me相同的步骤,唯一的变化是用于检测符号的正则表达式。

last_pos = '%s+%dc' % (pos, len(i)) # The only change

包含必要更改的完整check_for_symbols函数将如下所示-:

def check_for_symbols(symbol_dict) : # pass symbol dict as argument using lambda construct.
#    symbol dict format-: {keyword : color}
    
    for i in symbol_dict :
        text.tag_remove(i, '1.0', tk.END)
        
        pos = 1.0
        while 1:
            pos = text.search(i, pos, regexp = True, stopindex = tk.END)
            if not pos:
                break
            last_pos = '%s+%dc' % (pos, len(i)) # The only change
            text.tag_add(i, pos, last_pos)
            pos = last_pos
        text.tag_config(i, foreground = symbol_dict[i])
    root.after(1000, check_for_symbols)
    return

912