gpt4 book ai didi

python - 当我使用 idlelib 突出显示语法时如何避免更改 tkinter 中选定文本的颜色

转载 作者:行者123 更新时间:2023-12-05 05:33:24 25 4
gpt4 key购买 nike

我最近发现了how to highlight syntax in tkinter text widget使用空闲库。我试过了,我认为用它来制作我的文本编辑器应用程序会很酷。但问题是,当用户选择文本时,过滤器着色的文本不起作用。下面是我正在努力实现的一个小例子:

from tkinter import *
from idlelib.colorizer import ColorDelegator
from idlelib.percolator import Percolator

root = Tk()

txt = Text(root, font=("Courier", 20))
txt.pack()

cdg = ColorDelegator()

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'}

Percolator(txt).insertfilter(cdg)

root.mainloop()

预期结果(只是我使用的 IDE 的屏幕截图,我希望颜色在选中时仍然可见):

enter image description here

实际结果(你可以看到选中的文本't(“Hello Wor'是黑色的,但我不希望它是黑色的,我希望它是它本来的样子):

enter image description here

所以我的目标是不改变所选文本的前景色,无论它被标记为什么颜色。提前致谢。

最佳答案

所以OP是对的。 ColorDelegator 调用 self.tag_raise('sel') 将标签放在顶部,因此 "sel"的 foreground 选项 标签代替了其他标签。

如果你这样做:

import tkinter as tk

root = tk.Tk()
txt = tk.Text(root)
txt.pack()
print(txt.tag_config("sel")["foreground"]) # Outputs ('foreground', '', '', '', '#000000')

可以看到tkintertcl"sel"标签设置了一个默认的foreground选项.要删除它,请使用 txt.tag_config("sel", foreground="")

关于python - 当我使用 idlelib 突出显示语法时如何避免更改 tkinter 中选定文本的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73866704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com